На некоторых языках вы можете сделать
$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
, либо $b
. Но он не замыкается - он всегда будет die
.
Существует ли короткое замыкание OR
в PHP, которое возвращает фактическое значение?
Edit: Некоторые хорошие ответы на пример, который я дал, но я думаю, что мой пример не совсем то, что я имел в виду. Позвольте пояснить.
$a = func1() OR func2() OR func3();
Где каждая из этих функций действительно действительно интенсивно вычисляется, поэтому я хочу только один раз оценить каждое выражение. И для первого, чтобы вернуть истинное значение, я хочу, чтобы фактическое значение сохранялось в $a
.
Я думаю, что мы можем исключить запись функции, потому что она не будет замыкаться. И ответ условного оператора будет оценивать каждое выражение дважды.