Athos99, PHP et développement WEB

Un site consacré au développement web en php

Tester si une variable PHP est déclarée

Date: 
12 sep 2015

Beaucoup de développeurs croient que la function isset() permet de tester si une variable est définie. C'est partiellement le cas mais avec l'exception suivante : Si la variable est assignée à NULL, la fonction isset() retourne False. 

Cet article propose une solution pour traiter ce cas.

Exemple :

$a = null;
if (isset($a)) {
    echo 'var a is set';
} else {
    echo 'var a is not set';
}

Affichera : 

var a is not set

Si j'ajoute le cas où la valeur de la variable est nulle.

$a = null;
if (isset($a) || is_null($a)) {
 echo 'var a is defined';
} else {
 echo 'var a is not defined';
}
if (isset($b) || is_null($b)) {
 echo 'var b is defined';
} else {
 echo 'var b is not defined';
}

Affichera : 

var a is defined

( ! ) Notice: Undefined variable: b
Call Stack
#    Time    Memory    Function    Location
1    0.0066    367496    {main}( )    ..\vide.php:0

var b is defined

Cela marche pour la variable $a, La fonction is_null nous retourne TRUE pour une variable déclarée et assignée à Null

Cela ne fonctionne pas pour la variable $b qui n'est pas déclarée. L'appel à la fonction is_null avec comme paramètre la variable $b déclenche une erreur de type notice et cette fonction retrourne une indication TRUE ce qui laisse penser que la variable est déclarée.

Solution

Il est possible d'utiliser la fonction get_defined_vars() qui liste toutes les variables définies

Exemple : 

$a = null;

if (array_key_exists('a',get_defined_vars())){
    echo 'var a is defined';
} else {
    echo 'var a is not defined';
}
if (array_key_exists('b',get_defined_vars())){
    echo 'var b is defined';
} else {
    echo 'var b is not defined';
}

Si var $a est assignée à NULL et que var $b n'est pas définie, on obtient.

var a is defined
var b is not defined

 

Remarque

La solution proposée devrait être utilisée dans le cas ou l'on veut absolument tester qu'une variable est définie et qu'elle peut avoir une valeur NULL. Dans le cas général, on utilisera  la fonction isset() pour savoir que la variable existe et qu'elle contienne une valeur différente de null.

On pourrait aussi utiliser la fonction empty(), mais attention cette fonction retourne TRUE si la variable est null ou non défnie mais aussi si la variable elle égale à, "" (une chaîne vide), 0 (0 en tant qu'entier), 0.0 (0 en tant que nombre à virgule flottante), "0" (0 en tant que chaîne de caractères), FALSE, array() (un tableau vide).

Rubrique: 
Trucs et astuces
Tags: 
PHP
code