Logische Operatoren

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.

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Noncommercial-Share Alike 4.0 International