PHP-Tutorial: Operatoren

So nun haben wir Variablen, aber was machen wir mit ihnen!?
Um mit Variablen zu arbeiten gibt es die Operatoren. Mit ihnen kann man den Inhalt der Variablen verändern oder überprüfen usw.
Die ersten beiden Operatoren hab ich schon heimlich eingeführt. Dies war zum Einen der Zuweisungsoperator (Gleichheitszeichen =) und zum Anderen der Punktoperator mit dem man Zeichenketten verbindet. Noch ein kurzes Beispiel:

1
2
$test1 = "ein test";
$test2 = "ich bin" . $test1;

Hier weisen wir der Variablen $test1 mit dem Zuweisungsoperator den String "ein test" zu. Danach benutzen wir das Istgleich nochmals um $test2 zuzuweisen. In $test2 steht nun der verkettete Inhalte aus dem String "ich bin" und dem String $test1, also "ich binein test" (ich habe das Leerzeichen nicht vergessen, die beiden Strings haben am Anfang/Ende keines und bekommen auch nicht automatisch eines wenn sie verkettet werden!).

Mathematische Operatoren


Aber bevor hier jedmand auf die Idee kommt PHP würde nur aus Texten bestehen: Viel wichtiger werden Zahlen!
Zahlen kann man natürlich auch zuweisen, genau wie Strings. Desweiteren kennt PHP alle gängigen Operatoren, die man schon im Matheunterricht benutzt hat:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$zahl1 = 10;
$zahl2 = 5;
$addition = $zahl1 + $zahl2;
$subtraktion = $zahl1 - $zahl2;
$multiplikation = $zahl1 * $zahl2;
$division = $zahl1 / $zahl2;
$string = $zahl1 . $zahl2;
echo $zahl1," und ",$zahl2," ergeben ",$addition,"<br/>";
echo "$subtraktion = $zahl1 - $zahl2 <br/>";
echo $zahl1 . "*" . $zahl2 . "=" . $multiplikation . "<br/>";
echo "Division von " . $zahl1 . " und " . $zahl2 . " ergibt " . $division . "<br/>";
echo $string;
?>

Probiert das Beispiel einfach mal aus (Download: operatoren.bsp.tgz (528,00 B) ). Wie man sehen kann, ist es kein Problem die Zahlen wie einen String zu behandeln und mit dem Punkt zu verketten, damit erhält man eine 105, mit der man einfach weiter rechnen könnte (über den Sinn lässt sich natürlich streiten).
Wie ihr vielleicht wisst sind Informatiker die wahrscheinlich faulsten Menschen dieser Welt und so ist es nur logisch, dass sie sich für oft angewendete Operatoren Kurzformen einfallen lassen um das eine oder andere Zeichen zu sparen. So gibt es beispielsweise eine Abkürzung wenn man einen Operator auf eine Variable selbst anwenden möchte:

1
2
3
4
$zahl += 2; // entspricht $zahl = $zahl + 2;
$zahl -= 5; // entspricht $zahl = $zahl - 5;
$zahl *= 3; // entspricht $zahl = $zahl * 3;
$zahl /= 6; // entspricht $zahl = $zahl / 6;

Das erspart einem schon mal ein wenig Arbeit. Noch öfter muss man wahrscheinlich eine 1 auf eine Zahl addieren bzw. abziehen, hierfür muss es natürlich noch kürzer gehen. Und zwar mit dem Inkrement (++), was 1 auf die aktuelle Zahl addiert, und dem Dekrement (--), was 1 abzieht:

1
2
3
4
5
6
7
8
<?php
$zahl1 = 25;
$zahl1++; // -> $zahl1 += 1; -> $zahl1 = $zahl1 + 1;
echo $zahl1 . "<br/>";
$zahl2 = 25;
$zahl2--; // -> $zahl2 -= 1; -> $zahl2 = $zahl2 - 1;
echo $zahl2 . "<br/>";
?>

Als Ergebnis erhalten wir 26 und 24. Beim Inkrement und Dekrement gibt es noch zwei weitere Varianten, das Prä- und Postinkrement bzw Prä- und Postdekrement.
Beim Präinkrement werden die ++ vor die Variable geschrieben (++$zahl) und auf die Variable wird vor dem Anfassen eine 1 addiert, bei Postinkrement schreibt man die ++ hinter die Variable ($zahl++) und es wird erst der Wert ausgelesen und danach wird 1 addiert. Beim Dekrement jeweils äquivalent. Beispiel:

1
2
3
4
$zahl = 25;
echo $zahl++;
$zahl = 25;
echo ++$zahl;

Das erste echo gibt uns eine 25 aus, nach dem echo steht in der variablen dann eine 26. beim zweiten echo bekommen wir sofort eine 26 ausgegeben, danach ist die variable natürlich auch weiter 26.

Des weiteren sei noch der Typ bool genannt, welcher ebenfalls in Variablen gespeichert werden kann. Er repräsentiert einen Wahrheitswert, also "wahr" oder "falsch":

1
2
$wahr = true;
$falsch = false;


PHP interpretiert hierbei alle Variablen mit Wert als wahr. Also wenn in der Variablen nicht 0 oder der leere String oder false steht, dann ist sie wahr. Mag für den Einen oder Anderen erstmal seltsam klingen, auf den Trichter kommt ihr aber noch!

Vergleichsoperatoren


Nun können wir mit den Variablen nicht nur rechnen, wir können ihre Werte auch überprüfen. Hierfür stellt uns PHP einige Vergleichsoperatoren zur Verfügung, die die von uns gestellten Ausdrücke mit wahr oder falsch beantworten.
Als erstes sei hier das Istgleich (==) genannt. Denkt bitte daran, dass zwei aufeinander folgende Gleichheitszeichen vergleichen, eines weist zu!

1
2
3
4
5
$zahl1 == $zahl2;
1 == 1;
"ESMZ-dEsiGnZ" == "ESMZ-dEsiGnZ";
$zahl == 10;
$wort == "Hallo";

Man kann also lustig alles Mögliche vergleichen. Bemerkt sei, dass alle diese Ausdrücke Wahrheitswerte liefern, also 1 == 1 ist definitiv wahr (true), $zahl1 == $zahl2 ist jedoch nur wahr wenn $zahl1 auch den gleichen Inhalt wie $zahl2 hat, ansonsten falsch (false).

Als nächstes betrachten wir den Operator Ungleich (!=). Er überprüft also ob die beiden Werte links und rechts von ihm nicht gleich sind:

1
2
3
1 != 0;
"ESMZ-dEsiGnZ" != "esmz-designz";
5 != 5;

Die ersten beiden Zeilen in dem Beispiel liefern wahr, denn links und rechts steht nicht das Gleiche, 5 != 5 ist jedoch falsch, denn 5 ist ja das gleiche wie 5.

Damit kommen wir gleich zum Operator Nicht (!). Wie man sich leicht denken kann, dreht er das Ergebnis einfach um, wie bei != (also nicht gleich):

1
2
3
! (1 == 0);
! true;
! (1 != 0);

In der ersten Zeile wird also als erstes verglichen ob 1 gleich 0 ist. Dem ist natürlich nicht so, wir erhalten also falsch (false). Das ! liefert uns als Ergebnis nun nicht falsch, dies entspricht wahr, also ist die erste Aussage wahr! Die zweite Zeile sollte selbsterklärend falsch liefern und bei der dritten Zeile dürft ihr mal die grauen Zellen anstrengen! Notfalls probiert es einfach aus. Es gilt noch darauf zu achten, dass der Nicht-Operator unär ist. Das heißt er erwartet im Gegensatz zu == und != nur ein Argument!

Als nächstes schauen wir uns die Operatoren kleiner als (>) und größer als (<) an:

1
2
3
1 > 0;
0 < 1;
1 < 0;

Die ersten beiden Zeilen liefern wahr, die dritte falsch. Diese beiden Operatoren können natürlich auch wieder auf Text oder bool'sche Werte angewendet werden, erscheint mir aber recht sinnfrei.
Für diese beiden Operatoren gibt es noch eine Erweiterung, kleiner gleich (>=) und gröer gleich (<=). Anders als bei kleiner und größer liefert der Ausdruck im Falle der Gleichheit auch wahr:

1
2
3
4
1 >= 0;
0 <= 1;
1 >= 1;
0 >= 1;

Bis auf die letzte Zeile sind alle wahr.

logische Operatoren


Last but not least widmen wir uns den logischen Operatoren. Mit ihnen kann man mehrere Vergleiche verknüpfen.
Als erstes betrachten wir in dieser Gruppe das logische Und. PHP versteht ein Und nur in englisch als and, natürlich gibt es auch wieder eine Abkürzung, das doppelte Kaufmannsund &&. Eine Und-Verknüpfung liefert für den gesamten Ausdruck wahr, wenn beide Seiten wahr sind:

1
2
3
1 == 1 && 0 == 0;
1 != 0 and ! false;
1 == 0 && 0 == 0;

Erste und zweite Zeile liefern wahr, die dritte ist jedoch falsch. Hier sei noch erwähnt, dass PHP in der dritten Zeile das 0 == 0 gar nichtmehr auswertet, denn da der erste Ausdruck falsch ist, kann der gesamte Term nie wahr werden und aus performance Gründen wird hier sofort falsch geliefert. Das ist hier noch nicht so schlimm, wenn man in solchen Bedingungen Rückgaben von Funktionen auswertet, kann dies fatale Folgen haben, aber das werdet ihr noch merken ;-)

Der nächste logische Operator ist das Oder. Syntax ist or, oder als Abkürzung zwei Pipes || (für Windows-User: Die Pipe bekommt man mit "AltGr + <"). Ein Oder-Ausdruck ist wahr, wenn eine der beiden Seiten wahr ist:

1
2
3
4
1 == 1 || 1 == 0;
"hallo" != "hallo" or 5 == 5;
1 != 0 || 0 != 1;
0 == 1 or 1 == 0;

Die ersten drei Zeilen liefern insgesamt wahr, die vierte ist falsch. Man beachte, dass es reicht wenn eine der beiden Seiten wahr ist, es ist also egal ob der zweite Ausdruck wahr oder flasch ist, wenn der erste wahr war. PHP bricht den Vergleich also auch wieder ab, wenn der erste Ausdruck true liefert.

Im Gegensatz zu Oder beherscht PHP noch ein exklusives Oder, das xor, welches nur wahr wird, wenn genau eine der beiden Seiten wahr ist.

1
2
3
1 == 1 xor 0 == 1;
"hallo" == "nein" xor 1 == 0;
true xor true;

Hier wäre nur die erste Zeile wahr.

Damit hätten wir uns durch die Operatoren gekämpft... Es gibt natürlich noch weitere Operatoren, beispielsweise die bitweisen Operatoren oder Shifts, diese zu erklären würde aber sicher zu weit gehen.

© 2009-2017 by Martin Scharm