首先,这个表达式有名字吗?
Javascript
var value = false || 0 || '' || !1 || 'string' || 'wont get this far';
value
等于string
(字符串),也就是第五个选项
PHP
$value = false || 0 || '' || !1 || 'string' || 'wont get this far';
$value
等于true
(bool)
我是否正确地认为,通过嵌套三元操作符来实现与JavaScript相同的结果?什么是最好的解决方案?
发布于 2016-04-06 04:21:37
PHP中的等效运算符是?:
,它是没有中间部分的三元算子:
$value = false ?: 0 ?: '' ?: !1 ?: 'string' ?: 'wont get this far';
$a ?: $b
是$a ? $a : $b
的缩写。
发布于 2016-04-06 05:38:10
如果您正在使用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
发布于 2016-04-06 04:11:53
此测试false || 0 || '' || !1 || true || 'wont get this far'
将返回一个布尔值。如果其中任何一个值是true
,它将返回true
,这就是OR
的工作方式。它不是三元表达式,它将第一个有效值应用于接收变量。
它将1
返回给PHP,因为您没有将表达式转换为布尔值。
您可以这样做,使表达式返回一个布尔值而不是整数到PHP变量中:
$value = (bool)(false || 0 || '' || !1 || true || 'wont get this far');`
返回将是true
。
https://stackoverflow.com/questions/36450547
复制相似问题