echo "0: "; if ($h=4) { echo "true "; echo "$h \n<br/>"; } echo "1: "; if (5>3 || $i=1) { echo "true "; echo "$i \n<br/>"; } echo "2: "; if (5>3 | $j=2) { echo "true "; echo "$j \n<br/>"; } echo "3: "; if (5>3 or $k=3) { echo "true "; echo "$k \n<br/>"; }
ergibt
0: true 4 1: true 2: true 2 3: true
Daraus ergibt sich zunächst mal, dass der Ausdruck
($h=4)
true
ist. Man beachte, dass es sich hier um eine Zuweisung handelt! Möchte man überprüfen, ob $h
den Wert 4 enthält, muss der Ausdruck
($h==4)
benutzt werden! Zuweisungen sind also true
.
Weiterhin kann man aus 1 und 3 schließen, dass die Behandlung des komplette logischen Ausdrucks abgebrochen wird, sobald klar ist, welches Ergebnis sich ergeben muss. Bei einer Disjunktion (Oder-Verknüpfung) ist nach dem ersten true
schon klar, dass das Ergebnis ebenfalls true ist. Demnach könnte man nun aufhören den Ausdruck weiter zu verwerten. Das true
ist ja auch in allen Fällen korrekt. Allerdings geht in 1 und 3 der Programmierer davon aus, dass die Variablen $i
und $k
einen Wert zugewiesen bekommen. Dies ist aber nicht der Fall.
Lediglich bei der Verwendung von '|' wird der gesamte Ausdruck ausgewertet. Dies ist insbesondere bei der objektorientierten Programmierung interessant, wenn im zweiten Teil der Bedingung eine Methode aufgerufen wird, die weitere Werte verändern soll (z.B. eine Ausgabe).
Zusammenfassung:
Operator | Ausführung |
---|---|
| | vollständiger Ausdruck wird ausgewertet |
|| , or | Ausdruck wird nur soweit ausgewertet, wie für das Ergebnis notwendig |
Zur Operatorrangfolge siehe hier.