Uttryck
Uttryck
Uttryck är de viktigaste byggstenarna i PHP. I PHP är nästan allt du skriver ett uttryck. Det enklaste men mest exakta sättet att definiera ett uttryck är "något som har ett värde".
Grundläggande former av uttryck
De mest grundläggande formerna av uttryck är konstanter och variabler. När du skriver $a = 5
, tilldelar du 5 till $a
. 5 har uppenbarligen värdet 5, eller med andra ord är 5 ett uttryck med värdet 5 (i detta fall är 5 en heltalskonstant).
Efter denna tilldelning skulle du förvänta dig att $a
:s värde också är 5, så om du skrev $b = $a
, skulle du förvänta dig att det beter sig precis som om du skrev $b = 5
. Med andra ord är $a
också ett uttryck med värdet 5. Om allt fungerar rätt, är det precis vad som kommer att hända.
Funktioner
<?php function foo () { return 5; } ?>
Antag att du är bekant med konceptet av funktioner (om inte, ta en titt på kapitlet om funktioner), skulle du anta att skriva $c = foo()
är i princip samma som att skriva $c = 5
, och du har rätt. Funktioner är uttryck med värdet av deras returvärde. Eftersom foo() returnerar 5, är värdet av uttrycket 'foo()' 5. Vanligtvis returnerar funktioner inte bara ett statiskt värde utan beräknar något.
Variabler och värden
Självklart behöver inte värden i PHP vara heltal, och väldigt ofta är de inte det. PHP stöder fyra skalära värdestyper: heltalsvärden (int), flyttalsvärden (float), strängvärden och boolska värden (skalära värden är värden som du inte kan 'bryta' ned i mindre bitar, till skillnad från t.ex. arrayer). PHP stöder även två komposita (icke-skalära) typer: arrayer och objekt. Var och en av dessa värdestyper kan tilldelas till variabler eller returneras från funktioner.
Uttrycksorientering
PHP tar uttryck mycket längre, på samma sätt som många andra språk gör. PHP är ett uttrycksorienterat språk, i den meningen att nästan allt är ett uttryck. Betrakta exemplet vi redan har hanterat, $a = 5
. Det är lätt att se att det finns två värden inblandade här, värdet av den heltalskonstanta 5 och värdet av $a
som uppdateras till 5 också. Men sanningen är att det finns ett ytterligare värde inblandat här, och det är värdet av tilldelningen själv. Tilldelningen i sig utvärderas till det tilldelade värdet, i detta fall 5. I praktiken betyder det att $a = 5
, oavsett vad det gör, är ett uttryck med värdet 5. Således är att skriva något som $b = ($a = 5)
som att skriva $a = 5; $b = 5;
(ett semikolon markerar slutet på ett påstående). Eftersom tilldelningar tolkas från höger till vänster, kan du också skriva $b = $a = 5
.
Inkrement och dekrement
Användare av PHP och många andra språk kan vara bekanta med notationen variable++
och variable--
. Dessa är öknings- och minskningsoperatorer. I PHP, liksom i C, finns det två typer av ökning - pre-inkrement och post-inkrement. Både pre-inkrement och post-inkrement ökar variabeln, och effekten på variabeln är identisk. Skillnaden är med värdet av inkrementuttrycket. Pre-inkrement, som skrivs ++$variable
, utvärderas till det ökade värdet (PHP ökar variabeln innan den läser dess värde, därav namnet 'pre-inkrement'). Post-inkrement, som skrivs $variable++
utvärderas till variabelns ursprungliga värde, innan den ökades (PHP ökar variabeln efter att ha läst dess värde, därav namnet 'post-inkrement').
Jämförelseuttryck
En mycket vanlig typ av uttryck är jämförelseuttryck. Dessa uttryck utvärderas till antingen falskt eller sant. PHP stöder > (större än), >= (större än eller lika med), == (lika), != (inte lika), < (mindre än) och <= (mindre än eller lika med). Språket stöder också en uppsättning strikta ekvivalensoperatorer: === (lika med och samma typ) och !== (inte lika med eller inte samma typ). Dessa uttryck används mest inom villkorlig exekvering, som i if-satser.
Kombinerade operator-tilldelningsuttryck
Du vet redan att om du vill öka $a
med 1, kan du enkelt skriva $a++
eller ++$a
. Men vad om du vill lägga till mer än ett till det, till exempel 3? Du skulle kunna skriva $a++
flera gånger, men detta är uppenbarligen inte ett mycket effektivt eller bekvämt sätt. Ett mycket vanligare sätt är att skriva $a = $a + 3
. $a + 3
utvärderas till värdet av $a
plus 3, och tilldelas tillbaka till $a
, vilket resulterar i att $a
ökas med 3. I PHP, liksom i flera andra språk som C, kan du skriva detta på ett kortare sätt, vilket med tiden skulle bli tydligare och snabbare att förstå också. Att lägga till 3 till det aktuella värdet på $a
kan skrivas $a += 3
. Det betyder exakt "ta värdet av $a
, lägg till 3 till det, och tilldela det tillbaka till $a
". Förutom att vara kortare och tydligare, resulterar detta också i snabbare utförande. Värdet av $a += 3
, liksom värdet av en vanlig tilldelning, är det tilldelade värdet. Notera att det INTE är 3, men det kombinerade värdet av $a
plus 3 (detta är värdet som tilldelas till $a
). Alla tvåställiga operatorer kan användas i detta operator-tilldelningsläge, till exempel $a -= 5
(subtrahera 5 från värdet av $a
), $b *= 7
(multiplicera värdet av $b
med 7), etc.
Ternär villkorsoperator
<?php $first ? $second : $third ?>
Om värdet av det första deluttrycket är sant (icke-noll), utvärderas det andra deluttrycket, och det är resultatet av det villkorliga uttrycket. Annars ut
värderas det tredje deluttrycket, och det är värdet.
Exempel
<?php function double($i) { return $i*2; } $b = $a = 5; /* tilldela värdet fem till variabeln $a och $b */ $c = $a++; /* post-inkrement, tilldela ursprungliga värdet av $a (5) till $c */ $e = $d = ++$b; /* pre-inkrement, tilldela det ökade värdet av $b (6) till $d och $e */ /* vid denna punkt är både $d och $e lika med 6 */ $f = double($d++); /* tilldela två gånger värdet av $d innan ökningen, 2*6 = 12 till $f */ $g = double(++$e); /* tilldela två gånger värdet av $e efter ökningen, 2*7 = 14 till $g */ $h = $g += 10; /* först, ökas $g med 10 och slutar med värdet av 24. värdet av tilldelningen (24) tilldelas sedan till $h, och $h slutar med värdet av 24 också. */ ?>
Vissa uttryck kan betraktas som påståenden. I detta fall har ett påstående formen 'expr ;' det vill säga ett uttryck följt av ett semikolon. I $b = $a = 5
, är $a = 5
ett giltigt uttryck, men det är inte ett påstående i sig. $b = $a = 5
, är dock ett giltigt påstående.
Sanningsvärde av uttryck
En sista sak värd att nämna är sanningsvärdet av uttryck. I många händelser, främst i villkorlig exekvering och loopar, är du inte intresserad av det specifika värdet av uttrycket, utan bryr dig bara om huruvida det betyder sant eller falskt. Konstanterna true och false (skiftlägesokänsliga) är de två möjliga boolska värdena. När det är nödvändigt konverteras ett uttryck automatiskt till bool. Se avsnittet om typomvandling för detaljer om hur.
PHP erbjuder en fullständig och kraftfull implementering av uttryck, och att dokumentera det helt går utanför ramen för denna manual. Ovanstående exempel bör ge dig en bra uppfattning om vad uttryck är och hur du kan konstruera användbara uttryck. Under resten av denna manual kommer vi att skriva expr för att ange något giltigt PHP-uttryck.