最快 PHP 相当于 javascript `var a = var1||var2||var3;` 表达式
Quickest PHP equivalent of javascript `var a = var1||var2||var3;` expression
首先这个表达式有名字吗?
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 相同结果的正确方法是嵌套三元运算符?什么是最好的解决方案?
此测试false || 0 || '' || !1 || true || 'wont get this far'
将return 一个布尔值。如果任何值是 true
,它将 return true
,这就是 OR
的工作原理。它不是三元表达式,它将第一个有效值应用于接收变量。
它 returns 1
到 PHP 因为你没有将表达式转换为布尔值。
您可以这样做以使表达式 return 成为布尔值而不是整数到您的 PHP 变量中:
$value = (bool)(false || 0 || '' || !1 || true || 'wont get this far');`
return 将是 true
。
PHP中的等价运算符是?:
,也就是去掉中间部分的ternary operator:
$value = false ?: 0 ?: '' ?: !1 ?: 'string' ?: 'wont get this far';
$a ?: $b
是 shorthand 对于 $a ? $a : $b
。
如果您使用的是 PHP 5.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'));
现在创建一个迭代数组的函数,returns 第一个真值。
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
首先这个表达式有名字吗?
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 相同结果的正确方法是嵌套三元运算符?什么是最好的解决方案?
此测试false || 0 || '' || !1 || true || 'wont get this far'
将return 一个布尔值。如果任何值是 true
,它将 return true
,这就是 OR
的工作原理。它不是三元表达式,它将第一个有效值应用于接收变量。
它 returns 1
到 PHP 因为你没有将表达式转换为布尔值。
您可以这样做以使表达式 return 成为布尔值而不是整数到您的 PHP 变量中:
$value = (bool)(false || 0 || '' || !1 || true || 'wont get this far');`
return 将是 true
。
PHP中的等价运算符是?:
,也就是去掉中间部分的ternary operator:
$value = false ?: 0 ?: '' ?: !1 ?: 'string' ?: 'wont get this far';
$a ?: $b
是 shorthand 对于 $a ? $a : $b
。
如果您使用的是 PHP 5.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'));
现在创建一个迭代数组的函数,returns 第一个真值。
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