Expressions
Expressies
Expressies zijn de belangrijkste bouwstenen van PHP. In PHP is bijna alles wat je schrijft een expressie. De eenvoudigste maar meest nauwkeurige manier om een expressie te definiëren is "alles wat een waarde heeft".
De meest basale vormen van expressies zijn constanten en variabelen. Wanneer je $a = 5 typt, wijs je 5 toe aan $a. $a heeft uiteraard de waarde 5, of met andere woorden, $a is een expressie met de waarde van 5 (in dit geval is $a een integer constante).
$a = 5
Na deze toewijzing zou je verwachten dat de waarde van $a ook 5 is, dus als je $b = $a zou schrijven, zou je verwachten dat het zich gedraagt zoals als je $b = 5 zou schrijven. Met andere woorden, $b is ook een expressie met de waarde van 5. Als alles goed werkt, is dit precies wat er zal gebeuren.
$b = $a
Iets complexere voorbeelden van expressies zijn functies. Overweeg bijvoorbeeld de volgende functie:
<?php
function foo ()
{
return 5;
}
?>
Aangenomen dat je bekend bent met het concept van functies (als je dat niet bent, kijk dan naar het hoofdstuk over functies), zou je aannemen dat het typen van $c = foo() in wezen hetzelfde is als het schrijven van $c = 5, en je hebt gelijk. Functies zijn expressies met de waarde van hun returnwaarde. Aangezien foo() 5 retourneert, is de waarde van de expressie foo() 5. Gewoonlijk retourneren functies niet alleen een statische waarde, maar berekenen ze iets.
$c = foo()
Natuurlijk hoeven waarden in PHP geen integers te zijn, en dat zijn ze vaak ook niet. PHP ondersteunt vier scalare waarde types: integer waarden, floating point waarden (float), string waarden en boolean waarden (scalare waarden zijn waarden die je niet in kleinere stukjes kunt 'breken', in tegenstelling tot arrays, bijvoorbeeld). PHP ondersteunt ook twee samengestelde (niet-scalar) types: arrays en objecten. Elk van deze waarde types kan worden toegewezen aan variabelen of geretourneerd vanuit functies.
int
float
string
bool
PHP gaat veel verder met expressies, op dezelfde manier als veel andere talen dat doen. PHP is een expressie-georiënteerde taal, in die zin dat bijna alles een expressie is. Overweeg het voorbeeld dat we al hebben behandeld, $a = 5. Het is gemakkelijk te zien dat er hier twee waarden betrokken zijn, de waarde van de integer constante 5, en de waarde van $a die ook wordt bijgewerkt naar 5. Maar de waarheid is dat er hier nog een waarde bij betrokken is, en dat is de waarde van de toewijzing zelf. De toewijzing zelf evalueert naar de toegewezen waarde, in dit geval 5. In de praktijk betekent dit dat $a = 5, ongeacht wat het doet, een expressie is met de waarde 5. Dus iets schrijven als $b = ($a = 5) is als het schrijven van $a = 5; $b = 5;. Aangezien toewijzingen van rechts naar links worden geparsed, kun je ook schrijven $b = $a = 5.
$a = 5
$b = ($a = 5)
Een ander goed voorbeeld van expressie-georiënteerdheid is pre- en post-increment en decrement. Gebruikers van PHP en veel andere talen zijn misschien bekend met de notatie van ++$variable en $variable++. Dit zijn increment- en decrement-operators. In PHP, net als in C, zijn er twee soorten increment - pre-increment en post-increment. Zowel pre-increment als post-increment verhogen in wezen de variabele, en het effect op de variabele is identiek. Het verschil zit in de waarde van de increment-expressie. Pre-increment, dat wordt geschreven als ++$variable, evalueert naar de verhoogde waarde (PHP verhoogt de variabele voordat het zijn waarde leest, vandaar de naam 'pre-increment'). Post-increment, dat wordt geschreven als $variable++, evalueert naar de oorspronkelijke waarde van de variabele, voordat deze werd verhoogd (PHP verhoogt de variabele nadat het zijn waarde heeft gelezen, vandaar de naam 'post-increment').
variable++
variable--
Een zeer gebruikelijke soort expressies zijn vergelijkingen. Deze expressies evalueren naar ofwel false of true. PHP ondersteunt > (groter dan), >= (groter dan of gelijk aan), == (gelijk), != (niet gelijk), < (kleiner dan) en <= (kleiner dan of gelijk aan). De taal ondersteunt ook een set van strikte gelijkheidsoperators: === (gelijk aan en zelfde type) en !== (niet gelijk aan of niet zelfde type). Deze expressies worden het meest gebruikt binnen voorwaardelijke uitvoering, zoals if-statements.
if
Het laatste voorbeeld van expressies dat we hier zullen behandelen zijn gecombineerde operator-toewijzing expressies. Je weet al dat als je $a met 1 wilt verhogen, je eenvoudig $a++ of ++$a kunt schrijven. Maar wat als je er meer dan één aan wilt toevoegen, bijvoorbeeld 3? Je zou $a = $a + 3 meerdere keren kunnen schrijven, maar dit is uiteraard niet een zeer efficiënte of comfortabele manier. Een veel gebruikelijkere praktijk is om $a += 3 te schrijven. Dit evalueert naar de waarde van $a plus 3, en wordt terug toegewezen aan $a, wat resulteert in het verhogen van $a met 3. In PHP, net als in verschillende andere talen zoals C, kun je dit op een kortere manier schrijven, wat met de tijd duidelijker en sneller te begrijpen zou worden. 3 toevoegen aan de huidige waarde van $a kan worden geschreven als $a += 3. Dit betekent precies "neem de waarde van $a, voeg 3 toe en wijs het terug aan $a". Naast dat het korter en duidelijker is, resulteert dit ook in snellere uitvoering. De waarde van $a, net als de waarde van een reguliere toewijzing, is de toegewezen waarde. Merk op dat het NIET 3 is, maar de gecombineerde waarde van $a plus 3 (dit is de waarde die aan $a wordt toegewezen). Elke twee-plaats operator kan worden gebruikt in deze operator-toewijzingsmodus, bijvoorbeeld $a -= 5 (trek 5 af van de waarde van $a), $b *= 7 (vermenigvuldig de waarde van $b met 7), enzovoort.
$a
$a++
++$a
$a++
$a = $a + 3
$a + 3
$a
$a
$a
$a
$a += 3
$a
$a
$a += 3
$a
$a
$a -= 5
$a
$b *= 7
$b
Er is nog een expressie die vreemd kan lijken als je deze niet in andere talen hebt gezien, de ternary conditional operator:
<?php
$first ? $second : $third
?>
Als de waarde van de eerste subexpressie true (niet nul) is, dan wordt de tweede subexpressie geëvalueerd, en dat is het resultaat van de voorwaardelijke expressie. Anders wordt de derde subexpressie geëvalueerd, en dat is de waarde.
Het volgende voorbeeld zou je moeten helpen om pre- en post-increment en expressies in het algemeen iets beter te begrijpen:
<?php
function double($i)
{
return $i*2;
}
$b = $a = 5; /* wijs de waarde vijf toe aan de variabelen $a en $b */
$c = $a++; /* post-increment, wijs de oorspronkelijke waarde van $a
(5) toe aan $c */
$e = $d = ++$b; /* pre-increment, wijs de verhoogde waarde van
$b (6) toe aan $d en $e */
/* op dit punt zijn zowel $d als $e gelijk aan 6 */
$f = double($d++); /* wijs twee keer de waarde van $d voor
de increment, 2*6 = 12 toe aan $f */
$g = double(++$e); /* wijs twee keer de waarde van $e na
de increment, 2*7 = 14 toe aan $g */
$h = $g += 10; /* eerst wordt $g met 10 verhoogd en eindigt met de
waarde van 24. de waarde van de toewijzing (24) is
dan toegewezen aan $h, en $h eindigt met de waarde
van 24 als wel. */
?>
Sommige expressies kunnen worden beschouwd als statements. In dit geval heeft een statement de vorm van expr;, dat wil zeggen, een expressie gevolgd door een puntkomma. In $a = 5, is $a = 5 een geldige expressie, maar het is op zichzelf geen statement. $b = $a = 5; is echter een geldig statement.
expr ;
$b = $a = 5;
$a = 5
$b = $a = 5;
Een laatste ding dat het vermelden waard is, is de waarheidswaarde van expressies. In veel gevallen, voornamelijk in voorwaardelijke uitvoering en lussen, ben je niet geïnteresseerd in de specifieke waarde van de expressie, maar alleen in of deze waar of onwaar betekent.
De constanten true en false (hoofdletterongevoelig) zijn de twee mogelijke boolean waarden. Wanneer nodig, wordt een expressie automatisch geconverteerd naar boolean. Zie de sectie over type-casting voor details over hoe.
PHP biedt een volledige en krachtige implementatie van expressies, en het volledig documenteren ervan gaat verder dan de reikwijdte van deze handleiding. De bovenstaande voorbeelden zouden je een goed idee moeten geven van wat expressies zijn en hoe je nuttige expressies kunt construeren. Gedurende de rest van deze handleiding zullen we expr schrijven om elke geldige PHP-expressie aan te duiden.
expr