Kapitel 10. 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 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.