Operatorpriorität gibt an, wie „eng“ zwei Ausdrücke gebunden sind. Beispielsweise ergibt der Ausdruck 1 + 5 * 3 16 statt 18, da das Multiplikationszeichen („*“) eine höhere Priorität hat als das Pluszeichen („+“). Bei Bedarf können Klammern verwendet werden, um eine Prioritätsänderung zu erzwingen. Beispiel: (1 + 5) * 3 hat den Wert 18.
Wenn Operatoren die gleiche Priorität haben, bestimmt ihre assoziative Richtung, ob die Auswertung von rechts nach links oder von links nach rechts erfolgen soll – siehe Beispiel unten.
In der folgenden Tabelle sind die Operatoren in der Reihenfolge ihrer Priorität von hoch nach niedrig aufgeführt. Operatoren in derselben Zeile haben die gleiche Priorität und die Richtung, in der sie kombiniert werden, bestimmt die Reihenfolge der Auswertung.
Vorrang des Operators
Kombinationsrichtung >Keine, neuer Klon und neuer links [ array()
rechts ++ -- ~ (int) (float) (string) (array) (object) (bool) @ Typen und erhöhen/verringernKeine Instanz des Typs
Richtig! Logischer Operator
Links* / % arithmetischer Operator
Links+ - Arithmetische Operationen und Stringoperatoren links <<> != === !== <> Vergleichsoperatoren Linke & Bitweise Operatoren und Referenzen Linke ^ Bitweise Operatoren Linke | 🎜>Links && Logische Operatoren Links ||. Logischer Operator Links : Ternärer Operator Rechts = += -= *= /= .= %= &= |= ^= <<= >>= => Zuweisungsoperator links und und logischer Operator links xor logischer Operator links oder logischer Operator Links , werden an vielen Stellen verwendet. Bei Operatoren mit derselben Priorität bedeutet die linke assoziative Richtung, dass die Auswertung von links nach rechts erfolgt, und die rechte assoziative Richtung bedeutet das Gegenteil . Es ist möglich, dass ein Operator mit gleicher Priorität ohne assoziative Richtung nicht mit sich selbst kombiniert werden kann. Beispielsweise ist in PHP 1 < 2 > eine unzulässige Anweisung, 1 <= 1 == 1 jedoch nicht. Weil die Priorität des T_IS_EQUAL-Operators niedriger ist als die des T_IS_SMALLER_OR_EQUAL-Operators. Beispiel Nr. 1: Richtungen kombinieren
Die Verwendung von Klammern kann oft die Lesbarkeit Ihres Codes verbessern, auch wenn sie nicht unbedingt erforderlich sind.
Hinweis:
Obwohl = eine niedrigere Priorität als die meisten anderen Operatoren hat, erlaubt PHP dennoch Ausdrücke wie die folgenden: if (!$a = foo()), hier Im Beispiel die Rückgabe Der Wert von foo() wird $a zugewiesen.
Beispiel:
<?php $a = 3 * 3 % 5; // (3 * 3) % 5 = 4 $a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2 $a = 1; $b = 2; $a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5 // mixing ++ and + produces undefined behavior $a = 1; echo ++$a + $a++; // may print 4 or 5 ?>
Führen Sie den folgenden Befehl in der Befehlszeile aus, und das gedruckte Ergebnis ist falsch: