In manchen Sprachen können SieGibt es einen Kurzschluss OR in PHP, der den Wert ganz links zurückgibt?
$a = $b OR $c OR die("no value");
tun, das ist, wird die ODER Kurzschluss, nur Werte Auswertung von links nach rechts, bis er einen wahren Wert findet. Aber zusätzlich gibt es den tatsächlichen Wert, der ausgewertet wurde, im Gegensatz zu nur true
.
Im obigen Beispiel, in PHP, wird $a
1
der Wert sein, wenn entweder $a
$b
oder nicht-falsche Werte sind, oder es wird die
.
schrieb also eine Funktion first
, wie
$a = first($a, $b, die("no value"));
, die den Wert zurückgibt verwendet werden von beiden $a
oder $b
. Aber es schließt nicht kurz - es wird immer die
.
Gibt es einen Kurzschluss OR
in PHP, der den tatsächlichen Wert zurückgibt?
Edit: Einige gute Antworten für das Beispiel, das ich gab, aber ich denke, mein Beispiel nicht genau das, was ich meinte. Lass mich das klären.
$a = func1() OR func2() OR func3();
Wo jede dieser Funktionen hat eine wirklich sehr intensiv Berechnung, so möchte ich nur jeden Ausdruck höchstens einmal bewerten. Und für den ersten, der einen wahren Wert zurückgibt, möchte ich, dass der tatsächliche Wert in $a
gespeichert wird.
Ich denke, wir können das Schreiben einer Funktion ausschließen, weil es nicht kurzschließen wird. Und die Antwort des bedingten Operators wertet jeden Ausdruck zweimal aus.
Dies wird natürlich immer sterben. Wenn Sie eine Funktion aufrufen, muss PHP zuerst alle Parameter auswerten. Während der Auswertung sieht er "sterben" ("no value") und tut genau das. – Tom
Es war in Ordnung, jeden Ausdruck zweimal auszuwerten, wenn wir über Variablen sprachen. Sie müssen Ihre Frage beim ersten Mal formulieren und nicht eine Antwort kritisieren, nachdem Sie zusätzliche Informationen präsentiert haben, die beim ersten Mal nicht verfügbar waren. Wenn Sie Funktionen gemeint haben, verwenden Sie Funktionen zum ersten Mal. Die beste Antwort ist jetzt Chaos "Nein" –
Kommentar # 2 ist falsch. php hat eine Kurzschlussauswertung, aber AFAIK liefert nicht das am weitesten links liegende Vale. Es gibt immer einen booleschen Wert zurück. – apinstein