javascript的最快PHP等价物'var a=var1 | | var2 | | var3;`表达
首先,这个表达式有名字吗 Javascriptjavascript的最快PHP等价物'var a=var1 | | var2 | | var3;`表达,javascript,php,ternary-operator,Javascript,Php,Ternary Operator,首先,这个表达式有名字吗 Javascript var value = false || 0 || '' || !1 || 'string' || 'wont get this far'; value等于string(string)也就是第五个选项 PHP $value等于true(bool) 我认为通过嵌套三元运算符实现与JavaScript相同的结果的正确方法是正确的吗?最好的解决方案是什么 此测试false | | | | | | | | | | | | | | | | | | |!1
var value = false || 0 || '' || !1 || 'string' || 'wont get this far';
value
等于string
(string)也就是第五个选项
PHP
$value
等于true
(bool)
我认为通过嵌套三元运算符实现与JavaScript相同的结果的正确方法是正确的吗?最好的解决方案是什么 此测试
false | | | | | | | | | | | | | | | | | | |!1 | | true | |“不会走这么远”
将返回一个布尔值。如果任何值为true
,它将返回true
,这就是或
的工作方式。它不是将第一个有效值应用于接收变量的三元表达式
它将1
返回到PHP,因为您没有将表达式强制转换为布尔值
您可以这样做,使表达式在PHP变量中返回布尔值而不是整数:
$value = (bool)(false || 0 || '' || !1 || true || 'wont get this far');`
返回值将是
true
PHP中的等效运算符是?:
,它是不带中间部分的:
$value = false ?: 0 ?: '' ?: !1 ?: 'string' ?: 'wont get this far';
$a?:$b
是$a的缩写吗$a:$b
如果您使用的是PHP5.3或更高版本,请参阅
另一方面,可以使用嵌套的正则三元运算符
$value = ( false ? false : ( 0 ? 0 : ( '' ? '' : ( !1 ? !1 : ( 'string' ? 'string' : ( 'wont get this far' ? 'wont get this far' : null ))))));
哇,真难看
您可以使用一个值数组
$array = array(false,0,'',!1,'string','wont get this far'));
现在创建一个迭代数组并返回第一个真值的函数
function array_short_circuit_eval($vars = array()){
foreach ($vars as $var)if($var)return $var;return null;
}
$value = array_short_circuit_eval($array);
echo $value; // string
它仅为
true
测试echo true代码>你可能想看看。在JS中,它们被称为短路评估
@BlazeSahlzen感谢知道正确的术语帮助很大。我认为问题不是关于三元运算符。但是OP混淆地调用了三元运算符而不是短路求值。在Javascript中,OP返回一个操作数,而不是布尔值。在PHP中实现这一点的等效方法是?:
。问题回答了。谢谢你的解释。我在假设其他的东西。OP没有感到困惑,OP只是建议使用三元来实现结果。刚刚意识到。。并删除了我的答案以支持此答案。“。| |·······································?|
是否返回布尔值?它确实返回布尔值,但不是直接返回变量,在PHP中为否。我没有得到两张反对票,但好吗?它要么返回布尔值,要么不返回布尔值。将返回值赋给变量与否没有区别。一个值就是一个值。通过强制转换,|
的布尔返回值不会得到更多的布尔值。$value=current(array_filter(array(false,0,…)))
–我希望没有人需要使用它,但它在这里。。。
function array_short_circuit_eval($vars = array()){
foreach ($vars as $var)if($var)return $var;return null;
}
$value = array_short_circuit_eval($array);
echo $value; // string