Den senaste tiden har jag diskuterat med mina kollegor om det vanligaste PHP-felet att se upp med. Vi är överens om ett av de mest irriterande, ett glömt likamed tecken i en if-sats.
När man jämför två värden i PHP kan man använda dubba lika-med tecken, så här:
1
2
3
| if ($mittnamn == 'Mattias') {
echo 'Hello Mattias';
} |
När man tilldelar värden till variabler används ett lika-med tecken:
Tänk dig då vad som händer med den här koden:
1
2
3
| if ($mittnamn = 'Mattias') {
echo 'Hello Mattias';
} |
Den jämför inte värden, den testar om det går att tilldela $mittnamn värdet ‘Mattias’. If-satsen som var till för kontrollera om variabeln $mittnamn har värdet ‘Mattias’ kommer nu alltid vara sant. Även om $mittnamn innehåller namnet ‘Vera’ kommer ‘Hello Mattias’ skrivas ut.
Eftersom det är fullt möjligt att använda en if-sats på båda visen genereras inget felmeddelande. Och är man lite trött och stirrat sig blind på samma skript länge kan det vara väldigt svårt att hitta.