Operatoren

Wenn in PHP einer Variablen ein Wert zugewiesen wird, wenn Werte oder Variablen miteinander verglichen, verkettet, berechnet werden, dann geschieht dies durch Operatoren. PHP teilt Operatoren in Gruppen auf:

Wenn sie PHP von dieser Seite testen wollen, kopieren sie den PHP-Code innerhalb des body-Elements einer PHP-Datei.

Arithmetische Operatoren

Arithmetische Operatoren entsprechen den Grundrechenarten. Hier finden wir auch die Vorzeichen (unäres) plus und minius.

Operator Beschreibung Beispiel
+ Positives Vorzeichen +$a ist/entspricht $a.
- Negatives Vorzeichen -$a kehrt das Vorzeichen um.
+ Addition $a + $b ergibt die Summe von $a und $b.
- Subtraktion $a - $b ergibt die Differenz von $a und $b.
* Multiplikation $a * $b ergibt das Produkt aus $a und $b.
/ Division $a / $b ergibt den Quotienten von $a und $b.
% Restwert (Modulo) $a % $b ergibt den Restwert der Division von $a durch $b.
** Potenzieren $a**$b, Eingeführt in PHP 5.6

Beispiele mit arithmetischen Operatoren

Die arithmetischen Operatoren sind eigentlich selbsterklärend und brauchen hier keine Beispiele. PHP kennt einen Potenz-Operator (**), dieser steht allerdings erst ab der Version PHP 5.6 zur Verfügung. In älteren PHP Versionen kann dafür die pow()-Funktion verwendet werden. Die Funktion pow() potenziert die Basis mit dem Exponenten (erster und zweiter Parameter).

<?php
echo pow(5,2);
?>

Zuweisungsoperatoren

Wie sie bereits in den vorigen Kapiteln gesehen haben, wird in PHP (=) dazu verwendet, um einer Variablen einen Wert zuzuweisen. Der Zuweisungsoperator ist von rechts nach links assoziativ, das bedeutet, dass bei mehreren Zuweisungsoperatoren innerhalb eines einzigen Ausdrucks von rechts nach links ausgewertet wird. Als Folge davon kann man Code wie den folgenden schreiben, um mehreren Variablen jeweils denselben Wert zuzuweisen.

<?php
// Initialisierung mehrerer Variablen in einem Ausdruck
 $i = $j = $k = 100;
?>
Operator Beschreibung Beispiel
= Einfache Zuweisung $a = $b weist $a den Wert von $b zu und liefert $b als Rückgabewert.
+= Additionszuweisung $a += $b weist $a den Wert von $a + $b zu und liefert $a + $b als Rückgabewert.
-= Subtraktionszuweisung $a -= $b weist $a den Wert von $a - $b zu und liefert $a - $b als Rückgabewert.
*= Multiplikationszuweisung $a *= $b weist $a den Wert von $a * $b zu und liefert $a * $b als Rückgabewert.
%= Modulozuweisung $a %= $b weist $a den Wert von $a % $b zu und liefert $a % $b als Rückgabewert.
/= Divisionszuweisung $a /= $b weist $a den Wert von $a / $b zu und liefert $a / $b als Rückgabewert.
.= Zeichenkettenzuweisung $a .= $b weist $a den Wert von $a . $b zu und liefert $a . $b als Rückgabewert.

Beispiele mit Zuweisungsoperatoren

Eine Zuweisung kann auch in Kombination mit Rechenoperationen durchgeführt werden.

<?php
// Initialisierung
$zahlEins = 50;
$zahlZwei = 50;
$zahlDrei = 25;
$zahlVier = 25;
$zahlFuenf = 10;

//   Kurzformen
$zahlEins += $zahlZwei;
$zahlZwei -= 5;
$zahlDrei *= 2;
$zahlVier /= 5;
$zahlFuenf %= 3;

echo $zahlEins . "<br />";
echo $zahlZwei . "<br />";
echo $zahlDrei . "<br />";
echo $zahlVier . "<br />";
echo $zahlFuenf . "<br />";
?>

Zuweisung "by reference"

Im Zusammenhang mit Zuweisungen ist noch ein wichtiger Punkt zu beachten: Wie verhält sich PHP bei der Zuweisung einer Variablen zu einer anderen Variablen? Es existieren dann zwei unterschiedliche Variablen und somit auch zwei unterschiedliche Speicherbereiche, die nach der erfolgten Zuweisung zwar denselben Wert aufweisen, aber ansonsten völlig unabhängig voneinander im Arbeitsspeicher existieren. Diese Zuweisungsart wird auch als Zuweisung "by value" bezeichnet. Seit PHP 4 steht Ihnen jedoch noch eine weitere Form der Zuweisung zur Verfügung, bei der nach erfolgter Zuweisung beide Variablen auf denselben Speicherbereich verweisen. In diesem Zusammenhang spricht man auch von Zuweisungen "by reference". Wenn Sie Zuweisungen "by reference" vornehmen, weisen Sie also nicht einer Variablen den Wert einer anderen zu, sondern einer Variablen den Speicherbereich einer anderen, sodass im Ergebnis jetzt beide Variablen auf denselben Speicherbereich verweisen und somit nur noch eine Variable existiert, die allerdings zwei unterschiedliche Variablennamen besitzt. Für eine Zuweisung "by reference" wird ein & (Kaufmännisches Und) verwendet.

<?php
$vorname = "Adi";
$meinname = &$vorname;
echo $meinname;  // Ausgabe  - Adi
echo $vorname;  // Ausgabe - Adi
$vorname = "Gaby";
echo   $meinname;  // Ausgabe - Gaby
echo $vorname;  // Ausgabe - Gaby
$meinname =   "Harald";
echo $meinname;  // Ausgabe - Harald
echo $vorname;  // Ausgabe - Harald
?>

Vergeleichsoperatoren

Vergleichsoperatoren vergleichen Werte verschiedener Typen und liefern einen Booleschen Wert (true oder false). Die Vergleichsoperatoren werden am häufigsten in Konstruktionen wie if-Anweisungen und for while-Schleifen eingesetzt. Hier haben sie die Aufgabe, den Programmablauf zu steuern.

Operator Beschreibung Beispiel
< Kleiner als $a < $b ergibt true, wenn $a kleiner $b ist.
> Größer als $a > $b ergibt true, wenn $a größer $b ist.
<= Kleiner oder gleich $a <= $b ergibt true, wenn $a kleiner oder gleich $b ist.
>= Größer oder gleich $a >= $b ergibt true, wenn $a größer oder gleich $b ist.
== Gleichheit $a==$b ergibt true, wenn $a gleich $b ist.
=== Strikte Gleichheit $a===$b ergibt true, wenn $a gleich $b ist vom gleichen Typ.
!= Ungleichheit $a!=$b ergibt true, wenn $a ungleich $b ist.
<> Ungleichheit $a!=$b ergibt true, wenn $a ungleich $b ist.
!== Strikte Ungleichheit $a!==$b ergibt true, wenn $a ungleich $b ist vom gleichen Typ.

Beispiele mit Vergeleichsoperatoren

Achtung: Die Vergleichsoperatoren vergleichen zwei Strings in Bezug auf deren Anordnung zueinander. Der Vergleich benutzt hierbei die alphabetische Ordnung. Zu beachten ist, dass diese Ordnung auf der von PHP verwendeten Zeichenkodierung Latin-1 (ISO8859-1) beruht, die eine Erweiterung des ASCII-Zeichensatzes darstellt. In dieser Codierung kommen alle Großbuchstaben (ohne Umlaute) vor sämtliche Kleinbuchstaben, d. h., die Großbuchstaben sind kleiner!

<?php
// Groß- u. Kleinbuchstaben Vergleich
$ortEins = "Zoo";
$ortZwei =   "spielplatz";
$pruefen = $ortEins < $ortZwei; // Ergebnis: true (1)
echo "Ergebnis von \$pruefen: " . $pruefen;

Normalerweise sind zwei Variablen nicht gleich, wenn sie verschiedene Typen haben. Da PHP aber bei Bedarf automatisch Datentypen umwandelt, ist dies nicht immer der Fall.

<?php
// Initialiserung
$x = 45;
$y = "45";
if ( $x == $y ){
echo "Gleich";
}else{
echo "Ungleich";
}
?>

Inkrement- und Dekrementoperatoren

Zwei in der Programmierung häufig benötigte Operationen sind die Erhöhung bzw. Verminderung eines Zahlenwerts um 1.

Für Inkrement und Dekrement gibt es in PHP zwei spezielle Operatoren:

Beide Operatoren weisen gegenüber den anderen arithmetischen Operatoren einige Besonderheiten auf:

Operator Beschreibung Beispiel
++$x Pre-increment Inkrementiert $x mit 1 und liefert $x
$x++ Post-increment liefert $x und inkrementiert $x mit 1
--$x Pre-decrement Dekrementiert $x mit 1 und liefert $x
$x-- Post-decrement liefert $x und dekrementiert $x mit 1

Beispiele mit Inkrement- und Dekrementoperatoren

Sofern Sie den Dekrement- oder Inkrementoperator allein verwenden, ist es gleich, ob Sie die Postfix- oder Präfixnotation verwenden. Wenn Sie den Dekrement- oder Inkrementoperator in einem Ausdruck verwenden, müssen Sie jedoch klar zwischen Postfix- und Präfixnotation unterscheiden, denn beide führen zu unterschiedlichen Ergebnissen.

<?php
$summe = 0;
$zahl = 20;
$summe = ++$zahl; // Ergebnis: $summe und $zahl gleich 21
$summe = 0;
$zahl = 20;
$summe = $zahl++; // Ergebnis: $summe 20 und $zahl 21
?>

Logische Operatoren

Logische Operatoren dienen zum Vergleichen boolescher Werte (true und false) und geben einen dritten booleschen Wert zurück. Bei der Programmierung werden sie normalerweise zusammen mit Vergleichsoperatoren verwendet, um auf diese Weise komplexe Vergleiche auszudrücken, die sich auf mehr als eine Variable beziehen.

Operator Beschreibung Beispiel
&& / and Logisches UND (AND) Verknüpfung $a && $b ergibt true, wenn sowohl $a, als auch $b wahr sind. Ist $a bereits falsch, so wird false zurückgegeben und $b nicht mehr ausgewertet.
|| / or Logisches ODER (OR) Disjunktion $a || $b ergibt true, wenn mindestens einer der beiden Ausdrücke $a oder $b wahr ist. Ist bereits $a wahr, so wird true zurückgegeben und $b nicht mehr ausgewertet.
xor Exklusiv-ODER (XOR) $a xor $b ergibt true, wenn genau einer der beiden Ausdrücke $a oder $b wahr ist.
! Logisches NICHT Negation !$a ergibt false, wenn $a wahr ist und true, wenn $a false ist.

Logisches UND

Der Operator and bzw. && ergibt dann und nur dann true, wenn gleichzeitig der erste und der zweite Operand true sind. Ergibt schon der erste Operand ein false, ist das Ergebnis ebenfalls false. Das ist der Grund dafür, weshalb sich der Operator (&&) gar nicht erst damit aufhält, den zweiten Operanden noch zu überprüfen.

Operand 1 Operand 2 Operand 1 && Operand 2
true false false
false true false
true true true
false false false

Logisches ODER

Der Operator or bzw. || ergibt nur dann true, wenn der erste oder der zweite Operand wahr ist oder auch beide gleichzeitig. Genau wie (&&) wertet auch dieser Operator den zweiten Operanden nicht aus, wenn der erste Operand das Ergebnis schon endgültig festlegt. Ergibt der erste Operand true, dann ist das Ergebnis ebenfalls true, der zweite Operand kann das Ergebnis nicht mehr ändern und wird daher nicht ausgewertet.

Operand 1 Operand 2 Operand 1 || Operand 2
true false true
false true true
true true true
false false false

Logisches Entweder-Oder

Der Operator xor ergibt nur dann true, wenn genau einer der beiden Operanden wahr ist. Der Operator wertet immer beide Operanden aus. Sind beide Operanden true, dann ist das Ergebnis false.

Operand 1 Operand 2 Operand 1 xor Operand 2
true false true
false true true
true true false
false false false

Logisches NICHT

Der Operator ! ist ein unärer Operator, der vor seinem einzigen Operanden steht. Sein Zweck besteht darin, den booleschen Wert seines Operanden umzukehren.

Operand 1 !Operand 1
true false
false true

String Operatoren

Es gibt in PHP zwei Operatoren für string (Zeichenkette). Der erste ist der Vereinigungs-Operator ('.'), dessen Rückgabewert eine zusammengesetzte Zeichenkette aus dem rechten und dem linken Argument ist. Der zweite ist der Vereinigungs-Zuweisungsoperator ('.='), der das Argument auf der rechten Seite an das Argument der linken Seite anhängt.

Operator Beschreibung Beispiel
. Vereinigung $txt1 . $txt2 Verkettet $txt1 und $txt2
.= Vereinigung Zuweisung $txt1 .= $txt2 Verkettet $txt1 und $txt1 und $txt2

Beispiele für String Operatoren

<?php
$a = "Hallo ";
$b = $a . "Welt!"; // Ergebnis $b = "Hallo Welt!"
$a .= "Welt!"; // Ergebnis: $a = "Hallo Welt!"
?>

Array Operatoren

Mit dem + Operator können Arrays zusammengepackt werden. Bereits verwendete Indizes werden nicht überschrieben. Für Arrays können aber auch Vergleichsoperatoren verwendet werden. Zwei Arrays sind gleich (==) wenn sie die selben Arrayelemente besitzen und sind identisch (===) wenn die Arrayelemente in der selben Reihenfolge sind und die selben Typen haben.

Operator Beschreibung Beispiel
+ Vereinigung Vereinigung von $a und $b
== Gleichwertigkeit TRUE wenn $a und $b die gleichen Schlüssel- und Wert-Paare enthalten
=== Identität TRUE wenn $a und $b die gleichen Schlüssel- und Wert-Paare in der gleichen Reihenfolge enthalten
!= Ungleichheit TRUE wenn $a nicht gleich $b ist
<> Ungleichheit TRUE wenn $a nicht gleich $b ist
!== nicht identisch TRUE wenn $a nicht identisch zu $b ist

Beispiele für Array Operatoren

Array-Funktionen bieten noch weitere Möglichkeiten für den Vergleich.

<?php
$personen = array("a" => "Adi", "b" => "Gabi");
$fruechte = array("a" =>"Kirsche", "b" => "Erdbeere", "c" => "Birne");
$gesamt = $personen + $fruechte;
echo "<pre>";
var_dump($gesamt);


$personen1 = array("Adi", "Gabi");
$personen2 = array(1 =>"Gabi", 0 => "Adi");
// Gleichheit
var_dump($personen1 == $personen2); // bool(true)
// Strikte Gleichheit (Identisch)
var_dump($personen1 === $personen2); // bool(false)
echo "</pre>";
?>

Der Konditional- oder Trinitäts-Operator

Der Konditionaloperator (? :) ist der einzige Operator, welcher drei Operanden benötigt. Der erste steht vor dem ?, der zweite zwischen ? und :, und der dritte hinter dem :. Er wird übrigens auch als Bedingungsoperator oder Trinitäts-Operator bezeichnet, da man ihn für die Erzeugung einer einfachen if else-Anweisung nutzen kann.

(BEDINGUNG) ? AUSDRUCK1 : AUSDRUCK2; 

Beispiele für Trinitäts Operatoren

Eigentlich ist der bedingte Operator eine verkürzte if-then-else-Anweisung.

<?php
$age = 10;
// if-else Umsetzung
if ($age >= 18) {
  echo "Erwachsener";
} else {
  echo "Zu jung!";
}
echo "<br>";
// Konditionaloperator (?:) Umsetzung
($age >= 18) ? print "Erwachsener" : print "Zu jung!";
?>

Fehlerkontroll-Operator

PHP unterstützt einen Operator zur Fehlerkontrolle: Das @-Symbol. Stellt man das @ in PHP vor einen Ausdruck werden alle Fehlermeldungen, die von diesem Ausdruck erzeugt werden könnten, ignoriert.

Ist das track_errors-Feature aktiviert, werden alle Fehlermeldungen, die von diesem Ausdruck erzeugt werden, in der Variablen $php_errormsg gespeichert. Da diese Variable mit jedem neuen Auftreten eines Fehlers überschrieben wird, sollte man sie möglichst bald nach Verwendung des Ausdrucks überprüfen, wenn man mit ihr arbeiten will.

Beispiele für Fehlerkontroll-Operator

<?php
// Beabsichtigter Dateifehler
$my_file = @file('nicht_vorhandene_Datei') or
    die ("Datei konnte nicht geöffnet werden. Fehler war:'$php_errormsg'");

// Das funktioniert bei jedem Ausdruck, nicht nur bei Funktionen:
$value = @$cache[$key];
// erzeugt keine Notice, falls der Index $key nicht vorhanden ist.
?>

Der @-Operator funktioniert nur bei Ausdrücken. Eine einfache Daumenregel: wenn Sie den Wert von etwas bestimmen können, dann können Sie den @-Operator davor schreiben. Zum Beispiel können Sie ihn vor Variablen, Funktionsaufrufe und vor include() setzen, vor Konstanten und so weiter. Nicht verwenden können Sie diesen Operator vor Funktions- oder Klassendefinitionen oder vor Kontrollstrukturen wie zum Beispiel if und foreach und so weiter. Der @ Fehler-Kontroll-Operator verhindert jedoch keine Meldungen, welche aus Fehlern beim Parsen resultieren.
Zum gegenwärtigen Zeitpunkt deaktiviert der "@" Fehler-Kontrolloperator die Fehlermeldungen selbst bei kritischen Fehlern, die die Ausführung eines Skripts beenden. Unter anderem bedeutet das, wenn Sie "@" einer bestimmten Funktion voranstellen, diese aber nicht zur Verfügung steht oder falsch geschrieben wurde, Ihr PHP-Skript einfach beendet wird, ohne Hinweis auf die Ursache.