最快的PHP相当于javascript`var a = var1 || var2 || var3;`expression

时间:2016-04-06 12:01:44

标签: javascript php ternary-operator

首先是这个表达的名字?

的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相同结果的正确方法?什么是最好的解决方案?

3 个答案:

答案 0 :(得分:19)

PHP中的等效运算符是?:,它是没有中间部分的ternary operator

$value = false ?: 0 ?: '' ?: !1 ?: 'string' ?: 'wont get this far';

$a ?: $b$a ? $a : $b的缩写。

答案 1 :(得分:2)

如果您使用的是PHP 5.3或更高版本,请参阅deceze's answer

另外,你可以使用嵌套的常规三元运算符。

$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'));

现在创建一个迭代数组并返回第一个true值的函数。

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

答案 2 :(得分:1)

此测试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