在某些语言中,你可以做到
$a = $b OR $c OR die("no value");
也就是说,OR将短路,仅从左到右评估值,直到找到真值.但另外,它返回已评估的实际值,而不是公正值true.
在上述例子中,在PHP,$a将值1如果任一$a或$b是非假值,否则会die.
所以写了一个函数first,用作
$a = first($a, $b, die("no value"));
返回任一或的值.但是,它不会短路 - 它会永远.$a$bdie
ORPHP中是否有短路返回实际值?
编辑: 我给出的例子有一些很好的答案,但我想我的例子并不完全是我的意思.让我澄清一下.
$a = func1() OR func2() OR func3();
其中每个函数都执行非常强大的计算,所以我只想最多一次评估每个表达式.并且对于第一个返回真值,我希望存储实际值$a.
我认为我们可以排除编写函数,因为它不会短路.条件运算符答案将对每个表达式进行两次计算.
cha*_*aos 28
不,没有,而且,在我看来,这是Rasmus Lerdorf在设计PHP时做出的错误决定之一,其中大多数人为了溺爱无能者而惹恼了有能力的开发人员.
编辑:在PHP 5.3及更高版本中,您可以编写$a = $b ?: $c,甚至可以编写$a = $b ?: $c ?: $d.仍然不如非脑损伤的逻辑运算符,但它是一些东西.
你可以使用:
$a = func1() or $a = func2() or $a = func3();
Run Code Online (Sandbox Code Playgroud)
还是我错过了什么?