PHP variabelen declareren

Spread the love

Hoe voorkom ik PHP notices zoals undefined index: help in … in mijn 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.

Ik dacht dat je dit wel interessant zou vinden:   Website beveiligen tegen SQL-injection-aanvallen

Tip: 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 – voorbeeld 2

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;
 // standaard actie, matcht alles wat niet gematcht is
 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.

Ik dacht dat je dit wel interessant zou vinden:   Hoe kan ik mijn moederbord type & model achterhalen in Windows?

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.

Jan Reilink

My name is Jan. I am not a hacker, coder, developer, programmer or guru. I am merely a system administrator, doing my daily thing at Vevida in the Netherlands. With over 15 years of experience, my specialties include Windows Server, IIS, Linux (CentOS, Debian), security, PHP, websites & optimization.

Leave a Reply

Laat als eerste een reactie achter.

Hoi! Praat mee en laat een reactie achter!

wpDiscuz