不是一个至关重要的问题,只是想知道是否有任何在线人员这样做。
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'
有什么想法吗? :)
答案 0 :(得分: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
}
}
毕竟,行数对代码的执行方式几乎没有影响 - 同样重要的是,您的代码易于理解和维护。
答案 1 :(得分:1)
答案 2 :(得分:0)
return $type == 'prepend' ? $add . $text : $text . $add;
答案 3 :(得分:0)
您可以使用ternary operator来实现此目的:
function addString($text, $add, $type = 'prepend') {
return $type == 'prepend' ? $add . $text : $text . $add;
}
三元运算符实际上正在做的是检查第一个条件(?
之前的条件,看它是否计算为真。如果是,它将语句的返回值设置为{{1如果不是,则使用最后一个块(在$add . $text
之后)将返回值设置为:
。
正如PHP手册所说:
表达式(expr1)? (expr2): (expr3)如果expr1则求值为expr2 计算结果为TRUE,expr3表示expr1 评估为FALSE。
因此,如果某人提供的内容不是“$text . $add
”作为prepend
参数的值,那么这将始终默认为第二个条件并追加。
答案 4 :(得分:0)
$ text =($ type ==='prepend')? $ add。$ text:$ text。$ add;