Hoofdstuk 10. Expressies
Expressies zijn de belangrijkste bouwstenen van PHP. In PHP is bijna
alles wat je schrijft een expressie. De eenvoudigste en meest
accurate manier om een expressie te defineren is "alles dat een
waarde heeft".
De basis vorm van expressies zijn constanten en variabelen. Als je
typt "$a = 5", dan geef je $a de waarde '5'. '5', heeft als waarde
(natuulijk) 5, of met andere woorden '5' is een expressie met de
waarde 5 (in dit voorbeeld, '5' is een integer constante).
Na deze toekenning verwacht je dat de waarde van $a ook 5 zal zijn,
en als je nu zou schrijven $b = $a, dan verwacht je dat dit precies
hetzelfde zal doen als $b = 5. Met andere woorden, $a is ook een
expressie met de waarde 5. Als alles werkt zoals het hoort, zal
$b dus ook de waarde 5 krijgen.
Wat complexere voorbeelden van expressies zijn functies. Kijk
bijvoorbeeld naar de volgende functie:
Aangenomen dat je bekend met met het concept 'functiens' (als je
dit niet bent kijk dan in het hoofdstukk over functies), verwacht je
dat het typen van $c = foo() in essentie precies
hetzelfde is als het typen van $c = 5, en dit is ook
waar. Functies zijn expressies met de waarde die gelijk is aan de return
waarde van de functie. Omdat foo() 5 teruggeeft, is de waarde van de
expressie 'foo()' 5. Normaal gesproken retourneren functies geen
statische waarden natuurlijk, maar berekenen ze iets.
Natuurlijk kunnen waarden in PHP ook iets anders zijn dan integers.
PHP ondersteund drie scalaire types: integers, floating points en
strings. (Scalaire types hebben waardes die je niet in kleinere stukken
kunt breken, dit in tegenstelling tot bijvoorbeeld array's).
PHP ondersteund ook twee niet scalaire types: array's en objecten
Al deze types kunnen worden toegekend aan variabelen of worden
teruggegeven uit functies.
Tot zover zullen de gebruikers van PHP/FI 2 geen verschil merken,
maar PHP gaat veel verder met expressies, op dezelfde manier als
veel andere talen doen. PHP is een expressie-geori�nteerde
taal waarbij bijna alles een expressie is. Neem bijvoorbeeld het
voorbeeld dat je eerder hebt gezien: '$a = 5'. Het is eenvoudig
te zien dat het hier om twee waardes gaat, de waarde van de
integer constante '5' en de waarde van $a waaraan 5 wordt
toegekend. Maar in werkelijkheid is er nog een waarde, en deze
waarde is de waarde van de toekenning zelf. De toekenning zelf
evalueert tot de toegekende waarde, in dit geval 5. Dit betekend
dat '$a = 5', terzijde gelegd wat het doet, een expressies is met
de waarde 5. Dus als je zou schrijven: '$b = ($a = 5)' gebeurd er
precies als je zou schrijven: '$a = 5; $b = 5;' (een puntkomma
markeerd het einde van een statement). Omdat toekenningen worden
geparsed van rechts naar links, zou je ook kunnen schrijven
'$b = $a = 5'.
Een ander goed voorbeeld van expressie ori�ntatie zijn
pre- en post-increment en decrement. Gebruikers van PHP/FI 2
en vele andere talen zullen wellicht de notatie variabele++
en variable-- kunnen. Dit zijn de increment en decrement
operaties. In PHP/FI 2, heeft het statement '$a++' geen waarde
(het is geen expressie), en daarom kun je het niet toewijzen
of gebruiken op een andere manier. PHP voegt increment/decrement
toe aan de expressies, net zoals dit in C is. In PHP zijn er
twee types of increment, pre-increment en post-increment.
Zowel pre-increment en post-increment verhogen de variabele, en
het effect op de variabele is identiek. Het verschil ligt hem
aan de waarde van de totale increment expressie. Pre-increment,
dat wordt geschreven als '++$variable', evaluaeerd tot de
opgehoogde waarde (PHP increments de variabele voordat de waarde
wordt gelezen, vandaar de naam 'pre-increment'). Post-increment,
dat wordt geschreven als '$variable++' evalueert tot de
oorspronkelijke waarde van $variable, voordat deze is
opgehoogd (PHP increments de variable nadat deze is uitgelezen,
vandaar de naam 'post-increment').
Andere normale expressies zijn vergelijkings expressies. Deze
expressies evalueren tot 0 of 1 (dit betekent respectievelijk
FALSE en TRUE). PHP ondersteund > (groter dan), >= (groter dan
of gelijk aan), == (gelijk), != (niet gelijk), < (kleiner dan)
en <= (kleinder dan of gelijk aan). Deze expressies worden meestal
gebruikt binnen conditionele statements, zoals if
statements.
Het laatste type expressies waar we het over zullen hebben zijn
gecombineerde operatie-toewijzings expressies. Je weet al dat
als je $a wilt verminderen met 1, je '$a++' of '++$a' kunt
schrijven. Maar wat als je er meer wailt afhalen, bijvoorbeeld 3?
Je zou natuurlijk vaker '$a++' kunnen scjrijven, maar dit is
natuurlijk niet effici� of handig. Veel vaker wordt er
geschreven '$a = $a + 3'. '$a + 3' evaluaeerd tot de waarde van $a
plus 3, en wordt dan weer teruggewezen aan $a, dit resulteert in
een nieuwe waarde van $a die 3 onder d ehuidige waarde ligt.
In PHP, en in vele andere talen waaronder C, kun je dit korter
schrijven, zodat het makkelijker leest en sneller te begrijpen is.
Het ophogen van de huidige waarde van $a met 3 kan worden geschreven
als '$a += 3'. Dit betekend "neem de waarde van $a, tel er 3 bij
op, en ken het weer toe aan $a". Als derde voordeel (naast korter
en makkelijker te lezen, zal het statement ook sneller worden
uitgevoerd. De waarde van '$a += 3', is net zoals de waarde van
een normale toekenning, de toegekende waarde. Begrijp goed dat dit
NIET 3 is, maar de gecombineerde waarde van $a plus 3 (dit is
namelijk de waarde die wordt toegekend aan $a). Elke binairy
operator kan worden gebruikt voor deze operatie-toekennings mode,
bijvoorbeeld '$a -= 5' (verminder de waarde van $a met 5),
'$b *= 7' (vermenigvuldig de waarde van $b met 7), enz.
Er is nog een expressie die vreemd zal lijken als je het nog niet
hebt gezien in andere talen, namelijk ternaire conditionele
operator:
Als de waarde van de eerste sub-expressie waar is (niet-nul), dan
worde de tweede sub-expressie geevalueerd, en dit resultaat zijn
van de conditionele expressie. Anders worde de derde sub-expressie
geevalueerd, en wordt dit de waarde van de operatie.
Het volgende voorbeeld helpt je met het beter begrijpen van pre- en
post-increment en expressies in het algemeen:
Aan het begin van dit hoofdstuk vertelden we dat we verschillende
statement types zouden beschrijven, en zoals is gebleken kunnen
expressies statements zijn. Maar niet iederen expressie is een statement.
Een statement heeft de vorm 'expressie' ';' dat is een expressie
gevolgt door een punt-komma. In '$b=$a=5;' is $a=5 een geldige
expressie, maar niet een statement. '$b=$a=5;' is wel een geldig
statement in dit voorbeeld.
Er is nog een laatste ding waar we het over willende hebben, en
dat is de waarheids-waarde van expressies. In veel gevallen,
vaak in loops en andere conditionele dingen, ben je niet
ge�nteresseerd in een specifieke waarde, maar alleen of deze
waarde TRUE of FALSE betekent. (PHP heeft geen appart boolean
type). De waarheidswaarde van expressies in PHP is hetzelfde als
dat in Perl. Allen numerieke niet-nul waarden zijn TRUE, 0 is
FALSE. Let erop negatieve waardes ook niet-nul zijn en daarom
de waarheids-waarde TRUE is!. De lege string en de string "0"
zijn ook FALSE; alle andere strings zijn TRUE. In het geval van
niet scalaire waarden (array's en objecten) is de waardheids-
waarde FALSE als deze geen elementen bevat, anders evalueren ze
tot TRUE.
PHP heeft een volledige en krachtige implementatie van expressie,
en om dit te documenteren gaat geheel buiten de scope van deze
handleiding. De bovenstaande voorbeelden zouden je een goed idee
moeten geen over wat expressies zijn en hoe je ze goed kan
construeren. In de rest van deze handleiding zullen we
expr schrijven om een geldige PHP
expressie aan te geven.