На некоторых языках вы можете сделать
$a = $b OR $c OR die("no value");
То есть, ИЛИ будет закорачивать, оценивая значения только слева направо, пока не найдет истинное значение. Но кроме того, он возвращает фактическое значение , которое было оценено, а не true
.
В приведенном выше примере в PHP $a
будет значением 1
, если $a
или $b
не являются ложными значениями или die
.
Так написал функцию first
, которая будет использоваться как
$a = first($a, $b, die("no value"));
, который возвращает значение либо $a
, либо $b
. Но он не закорачивается - он всегда будет die
.
Есть ли в PHP короткое замыкание OR
, которое возвращает действительное значение?
Edit:
Несколько хороших ответов на пример, который я привел, но, думаю, мой пример не совсем то, что я имел в виду. Позвольте мне уточнить.
$a = func1() OR func2() OR func3();
Там, где каждая из этих функций выполняет действительно очень интенсивные вычисления , поэтому я хочу оценивать каждое выражение максимум один раз. И для первого, чтобы вернуть истинное значение, я хочу, чтобы фактическое значение было сохранено в $a
.
Я думаю, мы можем исключить написание функции, потому что она не будет закорачиваться. И ответ условного оператора оценит каждое выражение дважды.