最快的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(布尔)

我认为实现与JavaScript相同结果的正确方法是嵌套三元运算符,这是对的吗?什么是最好的解决方案?

PHP中的等价运算符是?:,它是没有中间部分的三元运算符:

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

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

如果您使用的是PHP 5.3或更高版本,请查看decze的答案。

另外,您可以使用嵌套的正则三元运算符。

$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

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

另一种带有"or"answers"="运算符的方法。

示例:

在Javascript中:

$value = false || 0 || !1 || 'woow, i am selected';

Php:

$value = false or $value = 0 or $value = !1 or $value = 'woow, i am selected';

这是可能的,因为在Php'或'中,运算符的优先级低于'='(赋值)。