Hoe voorkom ik PHP notices zoals “undefined index: help in …” in mijn PHP code? Het vooraf PHP variabelen declareren is hiervoor belangrijk. Je voorkomt dan notices en waarschuwingen over niet-geïnitialiseerde variabelen: lelijke meldingen waar je jouw websitebezoekers niet mee wilt lastigvallen. Door vooraf variabelen te declareren in PHP functioneert jouw PHP-website en applicatie ook beter, omdat variabelen waarmee wordt gewerkt al aanwezig zijn.

Let op, dit is een ouder artikel, overgezet vanaf de moeder-website Saotn.org. Uit 2013, maar nog steeds valide vandaag de dag.

Het belang van vooraf PHP variabelen declareren

Vooraf variabelen declareren gaat in PHP anders dan in bijvoorbeeld classic ASP. In classic ASP (VBScript) kun je met Option Explicit verplichten dat variabelen vooraf gedeclareerd moeten worden. PHP kent hiervoor helaas geen functie.

Dit artikel laat jou zien hoe je in PHP variabelen vooraf declareert.

Weak-typed PHP variabelen

Let op: PHP is weak-typed betreft variabelen. Dat wil zeggen dat het PHP niet uit maakt met wat voor soort variabele je werkt. Een Boolean kan dus net zo goed een Integer zijn en een Integer een String. Je kunt ze ook zonder moeite door elkaar gebruiken. Het is echter aan te raden om dit alleen te doen als het echt niet anders kan. Dit is netter voor je code en je voorkomt foutmeldingen, bijvoorbeeld als deze coulance in de toekomst wordt afgeschaft.

Zie ook Optimaliseer PHP op Windows Server

Niet gedeclareerde variabelen in PHP

Het volgende voorbeeld is een niet gedeclareerde variabele in PHP:

<?php
$help = $_GET['help'];
if( $help == 'hulp-nodig' ) {
show_help();
}
?>

Als we deze pagina aanroepen zonder help query string en parameter ($_GET['help']), dan geeft dit een notice of melding: Notice: Undefined index: help in path\to\test.php on line 3

Het vooraf declareren van PHP variabelen is daarom beter, verstandiger en veiliger:

<?php
$help = '';
if( isset( $_GET['help'] ) ) {
$help = $_GET['help'];
}
if( $help == 'hulp-nodig' ) {
show_help();
}
?>

De variabele $help is nu in ieder geval gedeclareerd en leeg als deze niet via een query string parameter wordt gevuld.

PHP Ternary operator

In de bovenstaande, verbeterde, PHP code is het declareren van de variabele $help en de eerste if {} te verkorten tot één regel. Hiermee wordt de uit te voeren code korter, en dat is weer goed voor het optimaliseren van de code.

Hieronder gebruiken we een ternary operator:

<?php
$help = isset( $_GET['help'] ) ? $_GET['help'] : '';
?>

Hier komt het er op neer dat bij (expr1) ? (expr2): (expr3) er wordt gekeken naar expr1. Als deze de waarde TRUE heeft is de uitkomst expr2. Als deze als FALSE evalueert, is de uitkomst expr3. Makkelijk toch?!

Zie PHP Comparison Operators voor meer informatie.

PHP Switch statement versus if(){} else(){}

Als er verschillende waarden aan $_GET['help'] meegegevens kunnen worden (bijvoorbeeld “hulp-nodig”, “geen”, “wat-is-dit”) dan is het verstandig een switch structuur te gebruiken. Dit geeft soms betere prestaties dan een eindeloze if-elseif-else lus. Ook is dit overzichtelijker.

<?php
$help = '';
if( isset( $_GET['help'] ) ) {
$help = $_GET['help'];
}
switch( $help ) {
case "hulp-nodig":
show_help();
break;
case "geen":
show_nohelp();
break;
case "wat-is-dit":
show_help();
break;
// de 'default case', of standaard actie; matcht alles wat niet gematcht is in de cases hierboven
default:
show_webpage();
}
?>

Als we de pagina nu aanroepen zonder help query string en parameter, dan wordt de default-case uitgevoerd. Dit komt omdat in bovenstaand voorbeeld code de variabele $help vooraf gedefinieerd en leeg is met $help = '';.

De default-case matcht alles wat niet eerder gematcht is en hierdoor wordt deze default-case uitgevoerd.

Je moet niet altijd vooraf variabelen declareren!

Ga nou niet als een dolle al je variabelen vooraf declareren! In sommige gevallen is het tóch verstandig dit niet te doen, bijvoorbeeld:

$description = strip_tags( $_POST['description'] );
echo $description;

doet hetzelfde als:

echo strip_tags( $_POST['description'] );

waarbij deze laatste de helft van de hoeveelheid geheugen gebruikt.

Conclusie PHP variabelen vooraf declareren

Zoals je ziet is het vooraf declareren van variabelen erg makkelijk in PHP. Ook is het belangrijk: je verkleint hiermee de mogelijkheid op foutjes in jouw PHP-code.

Een bijkomend voordeel is dat als je het goed doet, je jouw website ook sneller en beter beveiligt tegen SQL injection en MySQL sleep() aanvallen. Simpelweg omdat kwaadwillende bezoekers niet willekeurige waarden kunnen meegeven.

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *