PHP中是否存在短路OR,它返回最左边的值?

Ste*_*eve 21 php logic

在某些语言中,你可以做到

$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.仍然不如非脑损伤的逻辑运算符,但它是一些东西.

  • 先生,你不会发现我的任何争论. (6认同)
  • ?:语法是,恕我直言,完全不可读.短路会好得多,甚至没有可比性:/ (3认同)

ntd*_*ntd 9

你可以使用:

$a = func1() or $a = func2() or $a = func3();
Run Code Online (Sandbox Code Playgroud)

还是我错过了什么?

  • 对于"干净"的足够肮脏的价值. (17认同)
  • 我会提出答案,但如果我能用语言进行投票,那就太好了 (3认同)