Menu

PHP Operatoren: arithmetisch, logisch, Strings und mehr

PHP-Operatoren arbeiten mit Werten: +, -, *, /, %, ** zum Rechnen, =, +=, .=, ??= für Zuweisungen, &&, ||, ! und xor für Logik, . zum Verbinden von Strings, ==, ===, <=> zum Vergleichen und ++, -- zum Hochzählen. Jede Gruppe mit ausführbaren Beispielen, dazu die Rangfolge-Falle and vs &&.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

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

OperatorNameBeispielErgebnis
+Addition7 + 29
-Subtraktion7 - 25
*Multiplikation7 * 214
/Division7 / 23.5
%Modulo (Rest)7 % 21
**Potenz7 ** 249
-$aNegation-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

OperatorWahr, wenn
$a && $bbeide wahr sind
$a || $bmindestens einer wahr ist
!$a$a falsch ist
$a xor $bgenau einer wahr ist
$a and $b, $a or $bwie && 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.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S