PHP 中是否有返回最左侧值的短路 OR?

2022-08-30 19:48:55

在某些语言中,您可以

$a = $b OR $c OR die("no value");

也就是说,OR将短路,仅从左到右评估值,直到找到真实值。但除此之外,它还返回已计算的实际值,而不仅仅是 。true

在上面的示例中,在 PHP 中,如果任一或是非假值,则为值,否则它将是 。$a1$a$bdie

所以写了一个函数,要用作first

$a = first($a, $b, die("no value"));

返回 或 的值。但是,它不会短路 - 它将永远 。$a$bdie

PHP 中是否有返回实际值的短路 OR

编辑:对于我给出的例子,有一些很好的答案,但我想我的例子并不完全是我的意思。让我澄清一下。

$a = func1() OR func2() OR func3();

其中每个函数都执行非常非常密集的计算,因此我最多只想计算每个表达式一次。对于第一个返回真值,我希望将实际值存储在 .$a

我认为我们可以排除编写函数的可能性,因为它不会短路。条件运算符答案将计算每个表达式两次。


答案 1

不,没有,在我看来,这是Rasmus Lerdorf在设计PHP时做出的糟糕决定之一,为了溺爱不称职的开发人员,大多数决定都会阻碍有能力的开发人员。

编辑:在 PHP 5.3 及更高版本中,您可以编写 ,甚至 .仍然不如非脑损伤的逻辑运算符好,但它是某种东西。$a = $b ?: $c$a = $b ?: $c ?: $d


答案 2

您只能使用:

$a = func1() or $a = func2() or $a = func3();

还是我错过了什么?


推荐