# Variablen und Operatoren
Die Leute, die glauben, dass sie Computer hassen, hassen in Wirklichkeit nur die schlechten Programmierer.
– Larry Niven
# Variable
Wie prinzipiell jede Programmiersprache, die ernst genommen werden will, verfügt auch PHP über die Möglichkeit, Variablen verwenden zu können. Variablen kennzeichnen einen Speicherbereich, in dem während der Ausführung des Programms Werte gespeichert werden können.
In den meisten Sprachen muss vor der Verwendung einer Variablen jedoch festgelegt werden, von welchem Typ diese Variable sein soll. So z. B. in Perl: Dort wird der Typ der Variablen durch ein vorangestelltes Zeichen identifiziert ($
für Skalare, @
für Listen und %
für Hashes). Diese Unterscheidung existiert in PHP jedoch nicht. Hier beginnen alle Variablen mit dem Dollarzeichen $,
gefolgt von einer beliebigen Zeichenkette. Erst durch die Verwendung und die Zuweisung eines Wertes definiert sich der Typ der Variablen.
# Variablen bezeichnen
Um einer Variablen einen Namen zu geben, können Sie sowohl die Buchstaben von a bis z und von A bis Z verwenden und die Zahlen von 0 bis 9 als auch den Unterstrich _. Zusätzlich dürfen Sie auch Zeichen verwenden, die dem ASCII-Code 127 bis 255 entsprechen.
Außerdem sind Variablennamen in PHP case-sensitive, d. h., es wird zwischen Groß- und Kleinschreibung unterschieden.
$VAR = "Er";
$var = "Sie";
$vaR = "Es";
echo "$VAR, $var, $vaR";
Dieses Beispiel würde im Browser die Ausgabe Er, Sie, Es
erzeugen, da bei allen drei Zuweisungen unterschiedliche Variablen angesprochen werden – trotz gleich klingender Namen.
Nach dem Dollarzeichen $
darf übrigens nur ein Buchstabe oder der Unterstrich folgen, um einen gültigen Namen für eine Variable zu vergeben.
$abc123 = "abc und 123"; // gültig, da Buchstabe am Anfang
$_abc = "ABC"; // gültig, da Unterstrich am Anfang
$1_abc = "Ein ABC"; // ungültig, da Zahl am Anfang
$töterö = "Elefant"; // gültig, da ö dem ASCII-Code 246 entspricht
# Datentypen
Variablen in PHP definieren sich also durch den ihnen zugewiesenen Wert. Welche Datentypen es im Einzelnen gibt, soll nun in diesem Kapitel genauer betrachtet werden.
PHP unterscheidet generell zwischen acht primitiven Datentypen.
- Integer
- Fließkommazahl
- Boolean
- String
- Array
- Object
- Resource
- NULL
# Integer
Unter den primitiven Datentyp Integer fallen Dezimalzahlen, Oktalzahlen und auch hexadezimale Zahlen. Durch unterschiedliche Schreibweisen bei der Wertzuweisung entscheidet sich dann, welcher Datentyp zum Einsatz kommt.
$x = 1024;
$x = -512;
Bei einer solchen Zuweisung wird der Typ der Variablen auf Dezimalzahl gesetzt. Dabei darf der Wert positiv oder negativ sein. Die maximale Größe einer solchen Zahl ist plattformabhängig. Üblich ist jedoch eine Größe von 32 Bit (232).
$x = 0123; // Dezimal = 83
Diese Schreibweise weist der Variablen $x
den Typ Oktalzahl zu. Auch bei Oktalzahlen ist ein negativer und positiver Wertebereich erlaubt. Oktalzahlen werden immer durch eine führende 0
definiert.
$x = 0xFF; // Dezimal = 255
$x = 0x99; // Dezimal = 153
Dies ist die Schreibweise für eine hexadezimale Zahl. Hexadezimale Zahlen werden immer durch das Präfix 0x
definiert.
# Fließkommazahl
Fließkommazahlen werden in der Regel auch als »Floatingpoint« oder kurz »Float« bezeichnet. Mögliche Schreibweisen sind:
$x = 1.024;
$x = 1.2e6;
$x = 5E-10;
Auch die Größe einer Fließkommazahl ist plattformabhängig. In der Regel ist sie jedoch auf 64 Bit mit einer Genauigkeit von 14 Nachkommastellen festgelegt.
# Boolean
Variablen des Typs Boolean sind Wahrheitswerte und können entweder den Wert TRUE
oder FALSE
erhalten.
$x = TRUE;
$x = FALSE;
$x = True;
$x = fALSE;
Ob Sie TRUE
bzw. FALSE
nun groß- oder kleinschreiben, bleibt Ihnen überlassen. Wegen der besseren Lesbarkeit des Quelltextes wird in der Regel aber die Großschreibung verwendet.
Wenn Sie den Wert eines Booleans ausgeben möchten, müssen Sie beachten, dass TRUE
als 1 und FALSE
als leere Zeichenkette ausgegeben wird.
# String
Strings sind Zeichenketten und, wie in vielen Scriptsprachen üblich, können Sie sich aussuchen, ob Sie doppelte oder einfache Anführungszeichen verwenden.
$x = "Hallo"; // doppelte Anführungszeichen
$x = 'Hallo'; // einfache Anführungszeichen
Es gibt jedoch einen Unterschied. Wenn Sie doppelte Anführungszeichen verwenden, werden Variablen, die innerhalb einer Zeichenkette notiert wurden, automatisch aufgelöst.
$x = 5;
echo "Es ist nun $x Tage her, dass...";
Dieses Beispiel würde die Ausgabe
Es ist nun 5 Tage her, dass...
erzeugen. Die Variable $x
, die innerhalb der Zeichenkette notiert wurde, ist also durch ihren Wert ersetzt worden. Dagegen würde das Beispiel
$x = 5;
echo 'Es ist nun $x Tage her, dass...';
die Ausgabe
Es ist nun $x Tage her, dass...
erzeugen. Möchten Sie nun aber auch Anführungszeichen im Browser ausgeben, kann dies zu Problemen führen. Würden Sie das folgende Beispiel ausprobieren
echo 'I'll be back';
quittiert Ihnen PHP dies mit einer Fehlermeldung. Nun haben Sie zwei Möglichkeiten, das Problem zu lösen: Entweder verwenden Sie doppelte Anführungszeichen oder das Escape-Zeichen \\
.
echo "I'll be back";
echo 'I\'ll be back';
Beides sind akkurate Lösungen. Um wiederum das Escape-Zeichen auflösen zu können, müssen Sie zwei Backslashes hintereinander notieren.
echo "Alle Daten auf Laufwerk C:\\ löschen?";
// Ausgabe: Alle Daten auf Laufwerk C:\ löschen?
Bei der Verwendung von doppelten Anführungszeichen kennt PHP jedoch noch mehr Escape-Sequenzen.
Sequenz | Erklärung |
---|---|
\n | Zeilenumbruch |
\r | Wagenrücklauf |
\t | Tabulator |
\" | Doppeltes Anführungszeichen |
$ | Dollarzeichen |
\\ | Backslash |
Tabelle 2.1: Escape-Sequenzen bei Verwendung von doppelten Anführungszeichen
Bei einfachen Anführungszeichen kennt PHP nur die Escape-Sequenzen \\
und \\'
.
Wenn Sie versuchen, abhängig davon, welche Anführungszeichen Sie benutzen, eine andere als die erlaubte Escape-Sequenz zu verwenden, wird der Backslash mit ausgegeben.
# Nützliche Funktionen
Mit der Funktion isset
können Sie überprüfen, ob eine Variable existiert.
int isset(mixed var)
Wenn die Variable existiert, liefert die Funktion TRUE
zurück, andernfalls FALSE
.
Die Funktion unset
hingegen löscht eine Variable, und zwar nicht nur den Wert, sondern die vollständige Variable.
int unset(mixed var)
Wenn die Variable erfolgreich gelöscht wurde, liefert die Funktion TRUE
zurück; wenn nicht, dann FALSE
.
$x = 5;
echo isset($x);
unset($x);
echo isset($x);
Auch die Funktion gettype
ist unter Umständen sehr hilfreich. Sie ermittelt den Typ einer Variablen und gibt eine entsprechende Zeichenkette zurück.
$x = 5;
echo "Die Variable \$x ist vom Typ ";
echo gettype($x);
Die Ausgabe lautet:
Die Variable $x ist vom Typ integer
# Typumwandlung
Neben der automatischen Typendefinition können Sie mit speziellen Anweisungen auch eine explizite Typumwandlung vornehmen.
Der gewünschte Datentyp wird dann in runden Klammern nach dem Zuweisungsoperator =
notiert.
$x = "5";
echo gettype($x);
$x = (int) $x;
echo gettype($x);
Folgende Zieldatentypen sind erlaubt:
Datentyp | Erklärung |
---|---|
int, integer | Umwandlung in Ganzzahl |
string | Umwandlung in Zeichenkette |
float, double, real | Umwandlung in Fließkommazahl |
array | Umwandlung in Array |
object | Umwandlung in Objekt |
Tabelle 2.2: Zieldatentypen für eine explizite Typumwandlung
$x = 5.123;
echo gettype($x);
$x = (string) $x;
echo gettype($x);
# Arrays
Arrays sind Anordnungen von Variablen. Das zugehörige Äquivalent in Perl sind Listen und Hashes, wobei in PHP diese beiden Typen vereint sind. Aus diesem Grund unterscheidet man auch zwischen drei Array-Gruppen: einfachen Arrays, assoziativen Arrays und mehrdimensionalen Arrays.
Einfache Arrays bestehen aus einer bestimmten Menge von Variablen, die durch einen Index angesprochen werden. Dies kann sowohl bei der Wertzuweisung als auch beim Zugriff erfolgen.
$staedte[0] = "Berlin";
$staedte[1] = "Hamburg";
$staedte[2] = "Bremen";
$staedte[3] = "Stuttgart";
Die Ausgabe eines Wertes eines Arrays erfolgt dann über den Index, z. B.:
echo $staedte[2];
Bei der Definition eines Arrays können Sie den Index auch auslassen. Alle neuen Einträge im Array werden dann automatisch mit 0 beginnend indiziert.
$staedte[] = "Berlin";
$staedte[] = "Hamburg";
$staedte[] = "Bremen";
$staedte[] = "Stuttgart";
Analog sind auch die folgenden Schreibweisen möglich, ohne Festlegung eines bestimmten Index:
$staedte = Array("Berlin","Hamburg","Bremen","Stuttgart");
Wollen Sie auch bei dieser Schreibweise explizit einen Index festlegen, müssen Sie den Index notieren, gefolgt von =>
und anschließend dem Wert.
$staedte = Array(1 => "Berlin",
2 => "Hamburg",
0 => "Bremen",
3 => "Stuttgart");
Assoziative Arrays verwenden anstelle einer Indexnummer einen so genannten Schlüssel.
$laender["DE"] = "Deutschland";
$laender["FR"] = "Frankreich";
$laender["ES"] = "Spanien";
$laender["CH"] = "Schweiz";
Dementsprechend ist auch wieder eine kürzere Schreibweise möglich.
$laender = Array("DE" => "Deutschland",
"FR" => "Frankreich",
"ES" => "Spanien",
"CH" => "Schweiz");
Der Zugriff auf ein Element eines assoziativen Arrays erfolgt dann über den Schlüssel, z. B.:
echo $laender["DE"];
Solche Arrays enthalten prinzipiell weitere Arrays und werden durch die Angabe mehrere Indizes angesprochen. Stellen Sie sich dazu einfach eine Tabelle vor, die in Spalten und Zeilen unterteilt ist.
$tabelle["A"][1] = "Berlin";
$tabelle["B"][2] = "Hamburg";
$tabelle["C"][1] = "Bremen";
$tabelle["D"][3] = "Stuttgart";
Zum Auslesen eines Wertes eines mehrdimensionalen Arrays verwenden Sie wieder die Indizes, z. B.:
echo $tabelle["D"][3];
# Resource und NULL
Resource und NULL sind zwei sehr spezielle Datentypen, die Sie sicherlich nicht sehr oft verwenden werden.
Variablen vom Typ Resource sind Referenzen auf eine externe Datenquelle, wie z. B. eine Datenbank. Sie dienen dazu, Zugriffe auf Datenbanken und ähnliche Datenquellen zu erleichtern, indem für jeden offenen Zugriff eine Variable des Typs Resource definiert wird und die ID des Zugriffs in dieser Variablen gespeichert wird. Nur dadurch ist es z. B. möglich, auf zwei Datenbanken gleichzeitig zuzugreifen.
Verwechseln Sie den Datentyp NULL
nicht mit dem Wert 0 (denn die Zahl 0 ist ein Wert). NULL
ist nämlich ein Wert, dem »nichts« entspricht. Selbst ein leerer Wert ist immer noch ein Wert, denn er besitzt einen Zustand, nämlich leer. Das folgende Beispiel soll dies verdeutlichen.
$a = 5;
echo isset($a);
$a = NULL;
echo isset($a);
Die Zuweisung von NULL
an $a
endet mit dem gleichen Effekt wie die Anweisung
unset($a);
Die Schreibweise von NULL
ist übrigens egal, es sind sowohl NULL
als auch null
, Null
oder nUlL
möglich. Der Übersichtlichkeit halber sollten Sie NULL
aber groß schreiben.
# Operatoren
Auch PHP kennt eine Menge unterschiedliche Operatoren, wie z. B. logische Operatoren oder arithmetische Operatoren. Diese Operatoren sind übrigens stark an Perl und C angelehnt, was wieder einmal die Verwandtschaft zu diesen Sprachen zeigt.
# Arithmetische Operatoren
Arithmetische Operatoren dienen zur Berechnung bzw. Verknüpfung von Zahlenwerten.
Operator | Rechenart | Beispiel | Ergebnis |
---|---|---|---|
+ | Addition | $x = 5 + 3; | Summe 8 |
- | Subtraktion | $x = 10 – 5; | Differenz 5 |
* | Multiplikation | $x = 2 × 2; | Produkt 4 |
/ | Division | $x = 32 / 2; | Quotient 16 |
% | Modulo | $x = 13 % 7; | Rest 6 |
Tabelle 2.3: Arithemtische Operatoren in PHP
Der Ergebnistyp einer Division ist im Übrigen immer vom Typ Fließkommazahl, auch wenn die beiden Operanden vom Typ Ganzzahl sind. Nur durch die explizite Typumwandlung mit int
oder integer
erhalten Sie eine Ganzzahl.
$x = 13 / 7;
$x = (int) $x;
$y = 13 % 7;
echo "13 geteilt 7 ist gleich $x Rest $y";
Die Ausgabe lautet:
13 geteilt 7 ist gleich 1 Rest 6
Die Verkettung von arithmetischen Operatoren ist auch möglich, wobei die Regel Punkt-vor-Strich-Rechnung zum Tragen kommt.
$x = 2 + 2 * 2; // Ergebnis = 6
$x = 50 / 10 + 40; // Ergebnis = 45
Die Punkt-vor-Strich-Rechnung lässt sich jedoch auch durch das Setzen von runden Klammern beeinflussen.
$x = (2 + 2) * 2; // Ergebnis = 8
Damit auch in PHP nicht solche Schreibweisen wie
$x = $x + 1;
verwendet werden müssen, um den Wert von $x
um 1 zu inkrementieren, können Sie die kürzere Schreibweise
$x++;
verwenden. Dies ist natürlich auch beim Dekrementieren möglich:
$x = $x – 1
oder kürzer:
$x--;
Es gibt auch eine allgemeinere Verkürzung bei der Verwendung von arithmetischen Operatoren. Konstrukte wie
$x = $x + 5;
$y = $y * 3;
$z = $z / 10;
$xyz = $xyz – 30;
lassen sich auch folgendermaßen schreiben:
$x += 5;
$y *= 3;
$z /= 10;
$xyz -= 30;
# Vergleichsoperatoren
Mit Hilfe von Vergleichsoperatoren ist es möglich, zwei Werte miteinander zu vergleichen. In dieser Hinsicht besticht PHP durch seine Einfachheit. Während in Perl zwischen dem Vergleich von Zahlenwerten und Zeichenketten unterschieden werden muss, können Sie dies in PHP getrost ignorieren.
Das Ergebnis eines Vergleiches ist immer vom Typ Boolean.
Vergleich | Operator | Beispiel | Ergebnis |
---|---|---|---|
Sind die Werte gleich? | == | 1 == 1 | Wahr |
Sind die Werte gleich? | == | 1 == 2 | Unwahr |
Sind die Typen identisch? | === | 1 === 3 | Wahr |
Sind die Typen identisch? | === | 1 === "A" | Unwahr |
Sind die Werte ungleich? | != | 1 != 2 | Wahr |
Sind die Werte ungleich? | != | 1 != 1 | Unwahr |
Sind die Werte ungleich? | <> | 1 <> 2 | Wahr |
Sind die Werte ungleich? | <> | 1 <> 1 | Unwahr |
Sind die Werte nicht identisch? | !=== | 1 !=== "A" | Wahr |
Sind die Werte nicht identisch? | !=== | 1 !=== 2 | Unwahr |
Ist der linke Wert kleiner? | < | 1 < 3 | Wahr |
Ist der linke Wert kleiner? | < | 3 < 1 | Unwahr |
Ist der linke Wert größer? | > | 3 > 2 | Wahr |
Ist der linke Wert größer? | > | 2 > 3 | Unwahr |
Ist der linke Wert kleiner oder gleich? | <= | 1 <= 2 | Wahr |
Ist der linke Wert kleiner oder gleich? | <= | 2 <= 2 | Wahr |
Ist der linke Wert kleiner oder gleich? | <= | 3 <= 1 | Unwahr |
Ist der linke Wert größer oder gleich? | >= | 5 >= 2 | Wahr |
Ist der linke Wert größer oder gleich? | >= | 5 >= 5 | Wahr |
Ist der linke Wert größer oder gleich? | >= | 3 >= 5 | Unwahr |
Tabelle 2.4: Vergleichsoperatoren in PHP
Zusätzlich gibt es noch den Trinitätsoperator, der bei den Vergleichsoperatoren eine Sonderrolle spielt. Er entspricht einem einfachen Entweder-oder-Vergleich. Die Syntax lautet:
(ausdruck1) ? (ausdruck2) : (ausdruck3);
Ist das Ergebnis des ersten Ausdrucks TRUE
, wird der zweite Ausdruck zurückgegeben. Ist das Ergebnis des ersten Ausdrucks FALSE
, wird der dritte Ausdruck zurückgegeben.
Ein Beispiel:
$x = 5;
$a = ($x == 5) ? "fünf" : "nicht fünf";
echo $a;
# Zeichenkettenoperatoren
Es gibt eigentlich nur einen Zeichenkettenoperator bzw. zwei, wenn man die Kurzschreibweise des Operators hinzuzählt. Um zwei Zeichenketten miteinander verbinden zu können, müssen Sie den Konkatenationsoperator .
verwenden.
$str1 = "Hallo ";
$str2 = "Welt!";
$str3 = $str1 . $str2;
echo $str3;
Die Ausgabe lautet:
Hallo Welt!
Mit der Kurzschreibweise .=
können Sie folgende Konstrukte
$str = "Hallo ";
$str = $str + "Welt!";
durch folgende Schreibweise ersetzen:
$str = "Hallo ";
$str .= "Welt!";
# Logische Operatoren
Die logischen Operatoren dienen zur Verknüpfung mehrerer Teilausdrücke.
($a == 5) AND ($b == 3)
Der AND
-Operator verbindet zwei Teilausdrücke und liefert TRUE
, wenn beide Teilausdrücke TRUE
sind. Alternativ können Sie für AND
auch &&
verwenden.
($a == 5) OR ($b == 3)
Der OR
-Operator verbindet zwei Teilausdrücke in der Form, dass das Ergebnis TRUE
ist, sobald einer der beiden Teilausdrücke TRUE
ist. Alternativ können Sie für OR
auch ||
verwenden.
($a == 5) XOR ($b == 3)
Nur wenn einer der beiden Teilausdrücke TRUE
ist, ist das Ergebnis TRUE
. Sind beide Teilausdrücke TRUE
oder FALSE
, ist auch das Ergebnis FALSE
.
!($a == 5)
Der !
-Operator negiert einen Ausdruck. Das Ergebnis lautet TRUE
, wenn $a == 5 FALSE
ist.
Auch logische Operatoren unterliegen einer Rangordnung, wie z. B. +
, –, *
und /
. Auch hier können Sie mit runden Klammern die Priorität der einzelnen Operatoren beeinflussen. So hat nämlich auch der &&
-Operator Vorrang vor dem ||
-Operator, und auch der AND
-Operator hat Vorrang vor dem OR
-Operator. Jedoch haben die symbolischen Operatoren (&&
und ||
) wiederum Vorrang vor den literalen (AND
und OR
) Operatoren.
Beispiel:
$a == 5 OR $b == 3 AND $c = 4
// TRUE, wenn $c gleich 4 und $b gleich $ ODER $a gleich 5
($a == 5 OR $b == 3) AND $c = 4
// TRUE, wenn $c gleich 4 UND $a gleich 5 oder $b gleich 3
# Zusammenfassung
- Alle Variablen in PHP werden durch
$
-Zeichen eingeleitet. - Variablen können vom Typ Boolean, Integer, Fließkommazahl, String, Array, Object, Resource oder NULL sein.
- Bei Arrays interscheidet man einfache, assoziative und mehrdimensionale Arrays.
- Resource-Variablen werden z. B. für Datenbankverbindungen verwendet.
- NULL ist ein Datentyp, dem »nichts« entspricht.
# Fragen und Übungen
- Welche Operatoren stehen für arithmetische Operationen zur Verfügung (mathematische Berechnungen)?
- Welche Vergleichsoperatoren gibt es?
- Welche Zeichen dürfen Sie bei der Namensgebung von Variablen verwenden?
- Ist der Bezeichner
$tätäää
erlaubt?