Ausdrücke
Ausdrücke (Expressions) sind die wichtigsten Bausteine von PHP. In
PHP ist fast alles, was geschrieben wird, ein Ausdruck. Die einfachste,
aber auch zutreffendste Definition für einen Ausdruck ist "alles, was
einen Wert hat".
Die grundlegendsten Formen von Ausdrücken sind Konstanten und Variablen.
Wenn man "$a = 5" schreibt, weist man $a den Ausdruck '5' zu. '5' hat
offensichtlich den Wert 5. Anders ausgedrückt: '5' ist ein Ausdruck
mit dem Wert 5 (in diesem Fall ist '5' eine Integer-Konstante).
Nach dieser Zuweisung würde man erwarten, dass der Wert von $a nun
ebenfalls 5 ist; wenn man also $b = $a schreibt, sollte
dasselbe dabei herauskommen, als hätte man $b = 5 geschrieben.
Anders ausgedrückt: $a ist ebenfalls ein Ausdruck mit dem Wert 5.
Wenn alles richtig funktioniert, wird genau das passieren.
Etwas kompliziertere Beispiele für Ausdrücke sind Funktionen.
Betrachten wi zum Beispiel die folgende Funktion:
Angenommen, Sie sind mit dem Konzept von Funktionen vertraut (wenn
Sie es nicht sind, lesen Sie das Kapitel über Funktionen), dann
würden Sie annehmen, dass die Eingabe von $c = foo()
grundsätzlich dasselbe bedeutet, als würde man $c =
5 schreiben, und genau das trifft zu. Funktionen sind
Ausdrücke mit dem Wert ihres Rückgabewertes. Da foo() den Wert 5
zurückgibt, ist der Wert des Ausdruckes 'foo()' 5. Normalerweise
geben Funktionen nicht einfach einen statischen Wert zurück, sondern
berechnen etwas.
Natürlich müssen Werte in PHP keine Integer-Zahlen sein, und oft sind
sie es auch nicht. PHP unterstützt vier skalare Datentypen:
integer (Ganzzahlen), float (Fließkommazahlen),
string (Zeichenketten) und boolean
(Wahrheitswerte). (Skalare sind Datentypen, die man, im Gegensatz zu zum
Beispiel Arrays, nicht in kleinere Stücke 'brechen' kann.) PHP
unsterstützt auch zwei zusammengesetzte (nicht-skalare) Datentypen:
Arrays und Objekte. Jeder dieser Datentypen kann Variablen zugewiesen
und von Funktionen zurückgegeben werden.
PHP fasst den Begriff Ausdruck aber noch viel weiter, wie es auch andere
Programmiersprachen tun. PHP ist eine ausdrucksorientierte Sprache, in
dem Sinne, dass fast alles einen Ausdruck darstellt. Zurück zu dem
Beispiel, mit dem wir uns bereits beschäftigt haben: '$a = 5'. Es ist
einfach zu erkennen, dass hier zwei Werte enthalten sind: Der Wert der
Integer-Konstanten '5' und der Wert von $a, der auf 5 geändert wird. In
Wirklichkeit ist aber noch ein weiterer Wert enthalten, nämlich der Wert
der Zuweisung selbst. Die Zuweisung selbst enthält den zugewiesenen Wert,
in diesem Fall 5. In der Praxis bedeutet dies, dass '$a = 5', egal was
es tut, immer einen Ausdruck mit dem Wert 5 darstellt. Folglich ist
'$b = ($a = 5)' gleichbedeutend mit '$a = 5; $b = 5;' (ein Semikolon
markiert das Ende einer Anweisung). Da Wertzuweisungen von rechts
nach links geparst werden, kann man auch '$b = $a = 5' schreiben.
Ein anderes gutes Beispiel für die Ausdrucksorientierung von PHP
sind Prä- und Post-Inkrement sowie die entsprechenden Dekremente.
Benutzer von PHP und vielen anderen Sprachen sind vermutlich
mit den Notationen 'variable++' und 'variable--' vertraut. Dies
sind Inkrement- und
Dekrement-Operatoren. IN PHP/FI 2 hat das Statement '$a++'
keinen Wert (es ist kein Ausdruck) und daher kann man es nicht als
Wert zuweisen oder in irgendeiner Weise benutzen. PHP erweitert die
Eigenschaften von Dekrement und Inkrement, indem es die beiden
ebenfalls wie in C zu Ausdrücken macht. In PHP gibt es, wie in C,
zwei Arten von Inkrementen - Prä-Inkrement und Post-Inkrement.
Grundsätzlich erhöhen sowohl Prä- als auch Post-Inkrement den Wert der
Variable, und der Effekt auf die Variable ist derselbe. Der Unterschied
liegt im Wert des Inkrement-Ausdruckes. Das Prä-Inkrement, das
'++$variable' geschrieben wird, enthält als Wert den Wert der erhöhten
Variabe (PHP erhöht den Wert der Variablen, bevor es ihren Wert ausliest,
daher der Name 'PRÄ-Inkrement'). Das Post-Inkrement, das '$variable++'
geschrieben wird, enthält dagegen den ursprünglichen Wert der
Variablen vor der Erhöhung (PHP erhöht den Wert der Variablen,
nachdem es ihren Wert ausgelesen hat, daher der Name
'POST-Inkrement').
Ein sehr gebräuchlicher Typ von Ausdrücken sind Vergleichsausdrücke.
Diese Ausdrücke geben entweder FALSE oder TRUE zurück.
PHP unterstützt > (größer), >= (größer oder gleich), == (gleich),
!= (ungleich), < (kleiner), und <= (kleiner oder gleich). Die
Sprache unterstützt weiterhin ein Set von absoluten Vergleichsoperatoren:
=== (inhalts- und typgleich) und !== (nicht inhalts- oder typgleich). Diese
Ausdrücke werden meist in bedingten Anweisungen, wie z. B. in
if-Anweisungen, verwendet.
Im letzten Beispiel für Ausdrücke befassen wir uns mit kombinierten
Zuweisungs- und Operator-Ausdrücken. Wir wissen bereits, dass, wenn wir
$a um 1 erhöhen wollen, wir einfach '$a++' oder '++$a' schreiben können.
Aber was tut man, wenn man den Wert um mehr als eins erhöhen will, z. B.
um 3? Man könnte mehrer Male '$a++' schreiben, aber das ist
offensichtlich weder ein effizienter noch komfortabler Weg. Viel üblicher
ist es, einfach '$a = $a + 3' zu schreiben. '$a + 3' gibt den Wert von
$a plus 3 zurück, dieser wird wieder $a zugewiesen, was dazu führt, dass
$a nun um 3 erhöht wurde. In PHP - wie in einigen anderen
Programmiersprachen, z. B. in C - kann man dies aber noch
kürzer schreiben, was mit der Zeit klarer wird und auch einfacher
zu verstehen ist. Um 3 zu dem aktuellen Wert von $a hinzuzufügen, schreibt
man '$a += 3'. Das bedeutet exakt: "Nimm den Wert von $a, addiere
3 hinzu und weise $a den entstandenen Wert zu". Zusätzlich dazu,
dass diese Schreibweise kürzer und klarer ist, wird sie auch schneller
ausgeführt. Der Wert von '$a += 3' ist, wie der Wert einer regulären
Zuweisung, der zugewiesene Wert. Beachten Sie, dass dieser Wert NICHT 3,
sondern dem kombinierten Wert von $a plus 3 entspricht (das ist der Wert,
der $a zugewiesen wird). Jeder Operator, der zwei Elemente verbindet, kann
in dieser Schreibweise verwendet werden, z. B. '$a -= 5' (vermindert den
Wert von $a um 5) oder '$a *= 7' (multipliziert den Wert von
$a mit 7 und weist das Ergebnis $a zu), usw.
Es gibt einen weiteren Ausdruck, der Ihnen vielleicht seltsam vorkommt,
wenn Sie ihn bisher noch in keiner Programmiersprache kennengelernt
haben, den dreifach konditionalen Operator:
Wenn der Wert des ersten Sub-Ausdruckes (hier: $eins) TRUE ist
(d. h. nicht 0), dann wird der Wert des zweiten Subausdrucks
(hier: $zwei) ausgewertet und ist das Ergebnis des konditionalen
Ausdrucks. Andernfalls wird der dritte Subausdruck ausgewertet und
dessen Wert zurückgegeben.
Das folgende Beispiel sollte das Verständnis von Prä- und
Post-Inkrement und von Ausdrücken im Allgemeinen erleichtern:
Einige Ausdrücke können wie Anweisungen verwendet werden. In diesem Falle
hat eine Anweisung die Form 'expr' ';', dies meint einen Ausdruck gefolgt
von einem Semikolon. In '$b=$a=5;' ist $a=5 ein gültiger Ausdruck,
aber für sich allein keine Anweisung. '$b=$a=5;' ist jedoch eine gültige
Anweisung.
Ein letzter Punkt, der noch zu erwähnen ist, ist der Wahrheitswert
von Ausdrücken. In vielen Fällen, hauptsächlich in bedingten
Anweisungen und Schleifen, ist man nicht am spezifischen Wert
eines Ausdrucks interessiert, sondern kümmert sich nur darum,
ob er TRUE oder FALSE bedeutet.
Die Konstanten TRUE und FALSE (case-insensitiv) sind die beiden
möglichen Wahrheitswerte. Wenn nötig wird ein Ausdruck automatisch in
einen Boolschen Wert konvertiert. Wenn Sie mehr darüber erfahren wollen,
lesen Sie den Abschnitt über Typecasting.
PHP stellt eine vollständige und mächtige Implementat von Ausdrücken
bereit, deren vollständige Dokumentation den Rahmen dieses Manuals
sprengen würde. Die obigen Beispiele sollten Ihnen einen guten Eindruck
davon verschaffen, was Ausdrücke sind und wie man nützliche Ausdrücke
konstruieren kann. Im Rest dieses Manuals werden wir
expr schreiben, um ausdrücken, dass an dieser
Stelle jeder gültige PHP-Ausdruck stehen kann.