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 wir zum Beispiel die folgende Funktion:
<?php
function foo ()
{
return 5;
}
?>
Angenommen, Sie sind mit dem Konzept von Funktionen vertraut (wenn
Sie es nicht sind, lesen Sie das Kapitel über
Funktionen), dann würden Sie davon
ausgehen, 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: int (Ganzzahlen), float (Fließkommazahlen), string (Zeichenketten) und bool (Wahrheitswerte). (Skalare sind Datentypen, die man, im Gegensatz zu zum Beispiel Arrays, nicht in kleinere Stücke 'brechen' kann.) PHP unterstü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 ebenfalls 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 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 Variable (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 von $variable 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 mehrere 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 $b *= 7
(multipliziert den Wert von $b mit 7), 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:
<?php
$eins ? $zwei : $drei
?>
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:
<?php
function verdoppeln($i)
{
return $i*2;
}
$b = $a = 5; /* Weise den Variablen $a und $b den Wert 5 zu */
$c = $a++; /* Post-Inkrement, der urspruengliche Wert von $a (5)
wird $c zugewiesen. */
$e = $d = ++$b; /* Prae-Inkrement, der erhöhte Wert von $b (6) wird $d und
$e zugewiesen. */
/* An diesem Punkt sind $d und $e beide gleich 6 */
$f = verdoppeln($d++); /* Weise $f den doppelten Wert von $d vor
der Erhöhung um eins zu, 2*6 = 12 */
$g = verdoppeln(++$e); /* Weise $g den doppelten Wert von $e nach
der Erhoehung um eins zu, 2*7 = 14 to $g */
$h = $g += 10; /* Zuerst wird $g um 10 erhöht und hat damit den Wert
24. Der Wert dieser Zuweisung (24) wird dann $h
zugewiesen, womit $h ebenfalls den Wert von 24 hat. */
?>
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 Booleschen Wert konvertiert. Wenn Sie mehr darüber erfahren wollen,
lesen Sie den Abschnitt über
Typecasting.
PHP stellt eine vollständige und mächtige Implementierung 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 auszudrücken, dass an dieser Stelle jeder gültige PHP-Ausdruck stehen kann.