Ik ben ondertussen toch al een behoorlijk aantal jaren actief als PHP developer en ik heb al behoorlijk wat code van anderen moeten overnemen of onderhouden. En dan zie ik vaak dezelfde foutieve constructies en fouten terugkomen.
Hieronder een beknopt overzicht van de meeste voorkomende zaken. En hoe je er dan wel correct mee omgaat:
1. Gebruik geen closing tag “?>”
Er zijn maar weinig PHP coders die weten dat een closing tag niet verplicht is. Gebruik hem niet en je hebt nooit meer problemen met extra whitespace onderaan een pagina die de wel befaamde “Output already started” warnings geeft.
Onderstaande code is dus een perfect legale PHP file:
<?php
echo 'Hello World';
Zeurt je editor dat je toch een closing tag moet gebruiken? Dan is het misschien tijd om een nieuwe editor te zoeken.
2. Single en double quotes
Mensen gebruiken ook veel te vaak double quotes waar het totaal niet nodig is. Als er geen variabele substitutie nodig is, dan gebruik je simpelweg geen double quotes maar single quotes.
Fout:
$string = "U heeft alle vragen beantwoord";
Goed:
$string = 'U heeft alle vragen beantwoord';
In de meeste gevallen is het simpelweg korter en duidelijker om single quotes te gebruiken.
Goed:
$count = count($results);
$text = “Er waren $count aantal resultaten”;
Beter:
$text = ‘Er waren ‘ . count($results). ‘ aantal resultaten’;
Simpele rule-of-thumb: double quotes are evil.
3. Gebruik de heredoc syntax voor strings van meer dan 1 regel tekst
Iets wat helaas ook veel te vaak voorkomt, zijn onderstaande regels code:
$text = “Dit is de eerste lijn met een variable $var1”;
$text .= “Dit is de tweede lijn text met variable $var2”;
$text .= “Dit is ...”;
En het wordt nog erger als er HTML in staat:
$text = “<div id=‘main’><p style=’...’><a href=’$url1’>Eerste lijn</a>.</p>”;
$text .= “<p style=’...’>Dit is de <a href=’$url2’>tweede lijn</a>.</p>”;
$text .= “<p style=’...’>Dit is ...</p></div>”;
Los van het feit dat de style definities naar een CSS include file moeten, gaan de meeste editors de HTML code niet speciaal highlighten omdat het in een string staat. Maar het grote probleem is vooral dat er veel te veel code wordt verspild aan opmaaktekens terwijl het simpeler kan met heredoc synthax:
$text = <<<TXT
<div id=‘main’>
<p style=’...’>Dit is de <a href=’$url1’>eerste lijn</a> met $var1</p>
<p style=’...’>Dit is de <a href=’$url2’>tweede lijn</a> met $var2</p>
<p style=’...’>Dit is ...</p>
</div>
TXT;
Met deze constructie kun je ook gemakkelijk hele blokken HTML code gewoon in je document plakken, een paar variabelen aanpassen en klaar. En ondertussen kan je editor netjes z’n synthax coloring blijven toepassen. (In een MVC framework ga je dit natuurlijk niet veel tegenkomen, maar er zijn toch altijd die paar situaties waar zulke strings wel moeten worden opgebouwd.)
4. Simpele input format check met sprintf
Als je queries opbouwt die integers als variabelen gebruiken, is sprintf een zeer makkelijk manier om je code al te beschermen tegen SQL injectie: alles wat geen integer is wordt standaard herschreven naar de numerieke waarde 0:
Fout:
$query = “SELECT * FROM node WHERE id = $id”;
Goed:
$query = sprintf(‘SELECT * FROM node WHERE id = %d’, $id);
Als je deze manier wilt gebruiken om ook strings op een veilige manier door te geven aan queries dan kun je dat ook via sprintf doen. Maar gebruik dan zeker ook de quote functie van je database layer om veilig te zijn tegen SQL injectie:
$query = sprintf(‘SELECT * FROM node WHERE title LIKE %s’, $db->Quote(‘%’ . $str . ‘%’));
5. Strftime makes your life A LOT easier
In Nederlandstalige sites wordt er maar al te vaak teruggegrepen naar het manueel aanmaken van array’s met daarin de namen van de maanden en dagen van de week. En dat terwijl er een functie is die dat perfect automatisch kan doen aan de hand van de ingestelde locale: strftime.
Geeft deze functie je toch de Engelse termen weer? Dan is de correcte locale waarschijnlijk niet op je server geinstalleerd. Dat is iets wat je webhoster normaal gezien zonder problemen voor je kan installeren (onder Debian: dpkg-reconfigure locales).
6. And last but certainly not least: Get certified
Behaal het Zend 5.3 Certified Engineer certificaat. Het is een bewijs dat je effectief PHP kent. En staat ook heel goed op je CV. Maar het beste is toch wel dat je tijdens het studeren voor het examen een hele hoop zaken tegenkomt die je normaal gezien nooit gebruikt, maar waarvan je dan toch opeens denkt van “hmm, dit is toch wel handig”.