2011-04-05 55 views
2

不是一个重要的问题,只是想知道是否有任何的onliner来做到这一点。Oneliner将一个字符串前置或附加到另一个

function addString($text, $add, $type = 'prepend') { 
    // oneliner here 
    return $text; 
} 

$text = 'World'; 
addString($text, 'Hello ', 'prepend'); // returns 'Hello World' 
addString($text, ' Hello', 'append'); // returns 'World Hello' 

任何想法? :)

+1

无论我的答案如何,我不得不说,为此创建一个函数可能是不必要的,除非您可能在不知道是否需要预先安排/附加。 (即:不要使用这个来代替'$ text。= $ add'等) – 2011-04-05 20:16:45

回答

5

这个怎么样,使用ternary ?: operator

function addString($text, $add, $type = 'prepend') { 
    return $type=='prepend' ? $add . $text : $text . $add; 
} 


注:其实我可能不会使用 - 并保持了经典的if/else:不是一个衬垫,不太好阅读......但可能更容易理解;并有可理解的代码是非常重要的。注释后


编辑:如果你想确保$type或者是'append''prepend',并仍然希望一行程序,你可以用的东西是这样的:

function addString($text, $add, $type = 'prepend') { 
    return ($type=='prepend' ? $add . $text : ($type=='append' ? $text . $add : '')); 
} 

但是,你的代码将变得难以阅读 - 现在是时候去做一些比一行代码更长的东西,而且更容易理解。


例如,为什么没有这样的事情:

function addString($text, $add, $type = 'prepend') { 
    if ($type === 'prepend') { 
     return $add . $text; 
    } else if ($type === 'append') { 
     return $text . $add; 
    } else { 
     // Do some kind of error-handling 
     // like throwing an exception, for instance 
    } 
} 

毕竟,行数已经在路上几乎没有影响的代码被执行 - 并再次,重要的是你的代码很容易理解和维护。

+0

我想过三元运算符,但我想确定这是'prepend'或'append',如果有人提供别的什么? – JohnT 2011-04-05 20:08:20

+0

必须同意您对代码易读性的观点,但我认为在当今时代,单一的三元运算符几乎可以。 (当人们开始嵌套它们时,是时候进行一些聊天了。):-) – 2011-04-05 20:12:47

+1

@JohnT我用一些笔记编辑了我的答案;; @middaparka关于一个三元运算符是真实的,但是,正如你所说,嵌套它们导致地狱......我见过那些经常嵌套的东西...... – 2011-04-05 20:15:30

0
return $type == 'prepend' ? $add . $text : $text . $add; 
0

你可以使用一个ternary operator实现这一如下:

function addString($text, $add, $type = 'prepend') { 
    return $type == 'prepend' ? $add . $text : $text . $add; 
} 

什么三元运算符是有效的做的是检查的首要条件(在?之前查看它是否评估为true,如果是,则将返回值设置为t他声明到$add . $text,如果不是如果使用最后一个块(在:之后)将返回值设置为$text . $add

作为PHP手册所说:

表达式(表达式1)? (expr2): (expr3)如果expr1 的计算结果为TRUE,则计算为expr2;如果expr1 的计算结果为FALSE,则expr3计算为expr2。

因此,如果有人提供了比“prepend”以外的东西作为$type参数的值,那么这将始终默认为第二个条件和追加。

0

$ text =($ type ==='prepend')? $ add。$ text:$ text。$ add;

相关问题