Czy w PHP występuje zwarcie OR, które zwraca wartość najbardziej lewą?
W niektórych językach możesz to zrobić
$a = $b OR $c OR die("no value");
Oznacza to, że OR spowoduje zwarcie, oceniając wartości tylko od lewej do prawej, aż znajdzie prawdziwą wartość. Ale w dodatku powraca rzeczywista wartość, która została oceniona, w przeciwieństwie do justtrue
.
W powyższym przykładzie w PHP,$a
będzie wartością1
jeśli tak, to$a
lub$b
są wartościami innymi niż fałszywe lub będądie
.
Tak napisałem funkcjęfirst
, do użycia jako
$a = first($a, $b, die("no value"));
który zwracawartość albo$a
lub$b
. Ale nie powoduje zwarcia - zawszedie
.
Czy istnieje zwarcieOR
w PHP, który zwraca rzeczywistą wartość?
Edytować: Kilka dobrych odpowiedzi na podany przykład, ale myślę, że mój przykład nie jest dokładnie tym, co miałem na myśli. Pozwól mi wyjaśnić.
$a = func1() OR func2() OR func3();
Gdzie każda z tych funkcji wykonujenaprawdę bardzo intensywny obliczenia, więc chcę oceniać każde wyrażenie najwyżej raz. Aby po raz pierwszy zwrócić prawdziwą wartość, chcę, aby rzeczywista wartość była przechowywana$a
.
Myślę, że możemy wykluczyć zapisanie funkcji, ponieważ nie spowoduje ona zwarcia. A odpowiedź operatora warunkowego oceni każde wyrażenie dwukrotnie.