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 = . 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 = , 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 = 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 + zu schreiben . ´$a + 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 += . 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 += 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 -= ( vermindert den Wert von $a um 5 ) oder ´$a *= (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 :

 
$eins

 
?

 
$zwei

 
:

 
$drei



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 :

 
function

 
verdoppeln(

 
$i

 
)

 
{

 
return

 
$i*2

 
;

 
}

 
$b

 
=

 
$a

 
=

 
5

 
;

 
/

 
*

 
Weise

 
den

 
Variablen

 
$a

 
und

 
$b

 
beiden

 
den

 
Wert

 
5

 
zu

 
*

 
/

 
$c

 
=

 
$a++

 
;

 
/

 
*

 
Post-Inkrement

 
,

 
der

 
urspruengliche

 
Wert

 
von

 
$a

 
(also

 
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

 
=

 
double(++$e)

 
;

 
/

 
*

 
Weise

 
$g

 
den

 
doppelten

 
Wert

 
von

 
$e

 
  
   
nach

  

 

 
function

 
verdoppeln($i

 
)

 
{

 
return

 
$i*2

 
;

 
}

 
$b

 
=

 
$a

 
=

 
5

 
;

 
/

 
*

 
Weise

 
den

 
Variablen

 
$a

 
und

 
$b

 
beiden

 
den

 
Wert

 
5

 
zu

 
*

 
/

 
$c

 
=

 
$a++

 
;

 
/

 
*

 
Post-Inkrement

 
,

 
der

 
urspruengliche

 
Wert

 
von

 
$a

 
(also

 
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

 
=

 
double(++$e)

 
;

 
/

 
*

 
Weise

 
$g

 
den

 
doppelten

 
Wert

 
von

 
$e

 
nach

 
der

 
Erhoehung

 
zu

 
,

 
2*7

 
=

 
14

 
to

 
$g

 
*

 
/

 
$h

 
=

 
$g

 
+=

 
10

 
;

 
/

 
*

 
Zuerst

 
wie

 
$g

 
um

 
10

 
erhöht

 
und

 
hat

 
schliesslich

 
den

 
Wert

 
24

 
.




 
Der

 
Wert

 
dieser

 
Zuweisung

 
(

 
24

 
)

 
wird

 
dann

 
$h

 
zugewiesen

 
,

 
womit

 
$h

 
ebenfalls

 
den

 
Wert

 
von

 
24

 
hat

 
.

 
*

 
/





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