Ausdrücke (Expressions) sind die wichtigsten Bausteine von PHP. In
PHP ist fast alles, was geschrieben wird, ein Ausdruck. Die einfachste,
aber auch zutreffenste Definition für einen Ausdruck ist "alles, was
einen Wert hat".
Die grundlegendste 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 wäre ebenfalls ein Ausdruck mit dem Wert 5.
Wenn alles richtig funktioniert, wird genau das passieren.
Etwas kompliziertere Beispiele für Ausdrücke sind Funktionen:
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 daselbe bedeutet, als würde man schreiben
$c = 5,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 irgendetwas.
Natürlich müssen Werte in PHP keine Integer-Zahlen sein, und oft sind
sie es auch nicht. PHP unterstützt drei skalare Datentypen: integer values
(Integer-Zahlen),floating point values (Fließkommazahlen) und string values
(Zeichenketten).
(Skalare sind Datentypen, die man nicht in kleinere Stücke ´brechen´ kann,
im Gegensatz zu Arrays).
PHP unsterstützt auch zwei zusammengesetzte (nicht-skalare) Datentypen:
Arrays und Objekte. Jeder dieser Datentypen kann Variablen zugewiesen
und von Funktionen zurückgegeben werden.
Bis hierhin sollten Benutzer von PHP/FI 2 keine Veränderung bemerkt haben.
PHP fasst den Begriff ´Ausdruck´ aber noch viel weiter, wie es auch andere
Programmiersprachen tun. PHP ist in dem Sinne eine ausdrucksoriente Sprache,
dass fast alles ein Ausdruck ist. Zurück zu dem Beispiel, mit dem wir
uns schon 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 zusätzlicher 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/FI 2 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 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 ist der
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 Variable, 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 0 (=FALSCH) oder 1 (=WAHR) zurück.
PHP unterstützt > (größer), >= (größer oder gleich), == (gleich),
!= (ungleich), < (kleiner), und <= (kleiner oder gleich). Diese
Ausdrücke werden meistens 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 haben schon gezeigt, wie
man den Wert von $a um 1 erhöht, nämlich indem man einfach ´$a++´
oder ´++$a´ schreibt. 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 effizient
noch sehr komfortabel. 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 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, resultiert sie auch
in einer schnelleren Ausführung. Der Wert von ´$a += 3´ ist, wie
der Wert einer regulären Zuweisung, der zugewiesene Wert. Es ist
zu beachten, 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) wahr ist
(d. h. nicht
NULL), dann wird der Wert des zweiten Subausdrucks
(hier: $zwei) zurückgeben und ist das Ergebnis des konditionalen
Ausdrucks.
Andernfalls (d. h. wenn der erste Ausdruck falsch ist), wird
der Wert des dritten Subausdruckes (hier: $drei) zurückgeben.
Das folgende Beispiel sollte das Verständnis von Prä- und
Post-Inkrement und von Ausdrücken im allgemeinen erleichtern:
Am Anfang dieses Kapitels hatten wir gesagt, wir würden die
verschiedenen Arten von Anweisungen beschreiben und, wie versprochen,
Ausdrücke können Anweisungen sein. Trotzdem ist nicht jeder Ausdruck
eine Anweisung. In diesem Fall hat eine Anweisung die Form
´Ausdr´ ´;´, d. h. ein 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 ´wahr´-Wert
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 WAHR oder FALSCH bedeutet (PHP hat keinen speziellen
boolean-Datentyp). Der Wahrheitswert eines Ausdrucks in
in PHP wird ähnlich bestimmt wie in Perl. Jeder numerische
Wert, der nicht NULL ist, bedeutet WAHR, NULL bedeutet FALSCH.
Es ist zu beachten, dass negative Werte nicht NULL sind und deshalb
als WAHR aufgefasst werden! Eine leere Zeichenkette und die
Zeichenkette "0" sind FALSCH; alle anderen Zeichenketten sind
WAHR. Nicht-skalare Datentypen (Arrays und Objekte) werden als
FALSCH betrachtet, wenn sie keine Elemente enthalten, anderfalls
geben sie WAHR zurück.
PHP stellt eine vollständige und mächtige Implementat von Ausdrücken
bereit und, deren vollständige Dokumentation den Rahmen dieses Manuals
sprengen würde. Die obigen Beispiele sollten Ihnen einen guten Eindruck
darüber verschaffen, was Ausdrücke sind und wie man nützliche Ausdrücke
konstruieren kann. Im Rest dieses Manuals werden wir
ausdr schreiben, um ausdrücken, dass an dieser
Stelle jeder gültige PHP-Ausdruck stehen kann.