Ein Operator nimmt einen oder mehrere Werte und erzeugt einen neuen: $a + $b addiert, $a . $b verbindet Strings, $a && $b ist ein logisches UND, $a === $b vergleicht, $i++ zählt hoch.
/ liefert einen Float, außer zwei Ganzzahlen lassen sich glatt teilen: 17 / 5 ist 3.4, 10 / 5 ist die Ganzzahl 2. Wenn du nur den ganzzahligen Teil willst, verwende intdiv(). Runden wird auf der Seite zu Mathe behandelt.
Arithmetische Operatoren
| Operator | Name | Beispiel | Ergebnis |
|---|---|---|---|
+ | Addition | 7 + 2 | 9 |
- | Subtraktion | 7 - 2 | 5 |
* | Multiplikation | 7 * 2 | 14 |
/ | Division | 7 / 2 | 3.5 |
% | Modulo (Rest) | 7 % 2 | 1 |
** | Potenz | 7 ** 2 | 49 |
-$a | Negation | -7 | -7 |
Modulo ist praktisch für „jedes n-te Element“ und für Prüfungen auf gerade oder ungerade. Sein Ergebnis übernimmt das Vorzeichen der linken Seite, und eine Division durch null wirft einen Fehler, den du abfangen kannst:
Zuweisungsoperatoren
= speichert einen Wert. Jeder arithmetische und jeder String-Operator hat eine kombinierte Form, die eine Variable direkt aktualisiert.
??= gehört zur Familie des Null-Coalescing-Operators. Es weist nur zu, wenn die Variable nicht gesetzt oder null ist.
Inkrement und Dekrement: ++ und --
$i++ liefert den aktuellen Wert und addiert dann 1. ++$i addiert 1 und liefert dann den neuen Wert. Der Unterschied zeigt sich nur, wenn du das Ergebnis im selben Ausdruck verwendest.
Mit dem Buchstabentrick werden oft Spaltennamen wie in einer Tabellenkalkulation (A, B, ... Z, AA) erzeugt.
Logische Operatoren: &&, ||, ! und xor
| Operator | Wahr, wenn |
|---|---|
$a && $b | beide wahr sind |
$a || $b | mindestens einer wahr ist |
!$a | $a falsch ist |
$a xor $b | genau einer wahr ist |
$a and $b, $a or $b | wie && und ||, mit niedrigerer Rangfolge |
&& und || werten kurzgeschlossen aus: Die rechte Seite wird nicht ausgewertet, wenn die linke das Ergebnis schon entscheidet. Deshalb ist isset($user) && $user->isAdmin() sicher.
and vs &&: die Rangfolge-Falle
and und or binden schwächer als =, also wirken sie in einer Zuweisung erst, nachdem der Wert gespeichert ist. Das ist ein klassischer Bug:
Die niedrige Rangfolge ist in einem Idiom nützlich, $file = fopen($path, 'r') or die('Cannot open');, wo die Zuweisung zuerst passieren soll. Überall sonst verwendest du && und ||.
String-Operatoren: . und .=
PHP hat zwei String-Operatoren: . verbindet zwei Strings ("Grace" . " " . "Hopper") und .= hängt an eine Variable an ($html .= "<li>"). + verbindet nie Strings: "3" + "4" ist die Zahl 7, während "3" . "4" der String "34" ist. Die Seite zu Strings behandelt Interpolation und Anführungszeichen.
Vergleich und der Spaceship-Operator <=>
== vergleicht nach einer Typumwandlung, === prüft zusätzlich den Typ, und <=> liefert -1, 0 oder 1, genau das, was Sortier-Callbacks brauchen. Die Details und die vollständige Tabelle für den lockeren Vergleich stehen auf der Seite zu Vergleichsoperatoren.
Array-Operatoren
+ bei Arrays ist eine Vereinigung: Schlüssel aus dem linken Array gewinnen, und nur fehlende Schlüssel werden aus dem rechten ergänzt. Das überrascht alle, die ein Anhängen erwarten. == prüft dieselben Schlüssel/Wert-Paare, === verlangt zusätzlich dieselbe Reihenfolge und dieselben Typen.
Um eine Liste an eine andere anzuhängen, verwendest du array_merge() oder die Spread-Syntax [...$a, ...$b].
Rangfolge der Operatoren
Wenn ein Ausdruck Operatoren mischt, wendet PHP sie in einer festen Reihenfolge an. Die, über die man stolpert, mit dem, was PHP 8.3 ausgibt:
echo 2 + 3 * 4; // 14: * before +
echo (2 + 3) * 4; // 20
echo 2 ** 3 ** 2; // 512: right to left, 2 ** 9
echo -2 ** 2; // -4: ** before unary minus
echo "Sum: " . 2 + 3; // Sum: 5, since PHP 8 + runs before .
Im Zweifel setzt du Klammern. Sie kosten nichts, und wer die Zeile als Nächstes liest, muss sich die Tabelle nicht merken.
Häufig gestellte Fragen
Was ist der Unterschied zwischen and und && in PHP?
Beide sind ein logisches UND, aber and hat eine niedrigere Rangfolge als =. Also speichert $x = true and false; den Wert true in $x (die Zuweisung passiert zuerst), während $x = true && false; den Wert false speichert. Verwende && und || in Ausdrücken und halte and/or aus Zuweisungen heraus.
Was macht % in PHP?
% ist der Modulo-Operator: Er liefert den Rest einer ganzzahligen Division, also ist 10 % 3 gleich 1. Das Ergebnis übernimmt das Vorzeichen des linken Operanden (-7 % 3 ist -1). Für Floats verwendest du fmod(), und % 0 wirft einen DivisionByZeroError.
Wie potenziere ich eine Zahl in PHP?
Mit dem Operator **: 2 ** 10 ist 1024. Er ist rechtsassoziativ, also ist 2 ** 3 ** 2 gleich 2 ** 9 = 512, und er bindet stärker als das unäre Minus, also ist -2 ** 2 gleich -4. Die Funktion pow(2, 10) macht dasselbe.
Was ist der Unterschied zwischen $i++ und ++$i in PHP?
Beide addieren 1 zu $i. $i++ (Post-Inkrement) liefert den alten Wert und erhöht danach; ++$i (Prä-Inkrement) erhöht zuerst und liefert den neuen Wert. In einer eigenen Zeile, etwa als Schritt einer for-Schleife, gibt es keinen Unterschied.