你知道一个很好的PHP hack来做内联条件赋值吗?
我真的喜欢JavaScript中的||
运算符,我们可以在其中进行内联条件赋值。你知道一个很好的PHP hack来做内联条件赋值吗?
var a = 0;
var b = 42;
var test = a || b || 'default value';
console.log(test); // 42
这是很清楚的阅读,并没有太多的线。
在PHP中,这个逻辑运算符返回布尔值:
$a = 0;
$b = 42;
$test = $a || $b || 'default value';
print_r($test); // bool(true)
当然,我们可以使用ternaries做内联分配:
$test = $a ? $a : $b ? $b : 'default';
print_r($test); // int(42)
但这个牌子代码暧昧,这不是即容易阅读。
所以在这里,我的问题来了:
你知道一个很好的PHP黑客做内联有条件的分配?
在PHP 5.3+ you can do this:
$test = $a ?: ($b ?: 'default value');
以及它如何比三元数字更可读? – DonCallisto 2013-05-12 08:12:23
@Don因为你不重复操作数。它具有与'a ||相同的可读性b || c',只是加了括号。 – deceze 2013-05-12 08:13:42
你有一点,但对我来说,这仍然是“难以阅读”:)(难以阅读,因为你可以考虑困难的三元组) – DonCallisto 2013-05-12 08:14:40
这将工作,只要你不需要短路副作用:
function either_or() {
$nargs = func_num_args();
if ($nargs == 0) {
return false;
}
$args = func_get_args();
for ($i = 0; $i < $nargs-1; $i++) {
if ($args[$i]) {
return $args[$i];
}
}
return $args[$nargs-1];
}
$test = either_or($a, $b, "Default value");
如果你不关心副作用,你可以写一个简单的函数来完成它。 – Barmar 2013-05-12 07:37:54
http://php.net/manual/en/control-structures.switch.php使用开关或添加括号'$ test =($ a?$ a:($ b?$ b:'default'))' ; – 2013-05-12 07:51:47
@BassJobsen,他不想使用三元组。 – 2013-05-12 07:54:13