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:
- Arithmetische Operatoren (Rechenoperatoren)
- Zuweisungsoperatoren
- Vergleichsoperatoren
- Inkrement- bzw. Dekrementoperatoren
- Logische Operatoren
- Zeichenketten-Operatoren
- Array-Operatoren
- Konditional- oder Trinitäts-Operator
- Fehlerkontroll-Operator
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.
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;
?>
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.
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.
- Die Erhöhung um 1 bezeichnet man als Inkrement.
- Die Verminderung um 1 bezeichnet man als Dekrement.
Für Inkrement und Dekrement gibt es in PHP zwei spezielle Operatoren:
- ++ (Inkrement)
- -- (Dekrement)
Beide Operatoren weisen gegenüber den anderen arithmetischen Operatoren einige Besonderheiten auf:
- Sie haben nur einen Operanden.
- Sie können ihrem Operanden vor- oder nachgestellt werden (Präfix/Postfix).
- Sie verändern den Wert ihres Operanden.
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.
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.
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.
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.
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.
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.
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.
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.