fbpx

isset() ou empty() ?

isset_empty

L’une des choses les plus ambiguës pour les développeurs novices (J’avoue que ca me le fait pas mal de fois a moi aussi 😀 ) est comment tester les conditions bouléennes. Nous voulons tous ecrire du code qui n’émet pas de notices ni de warnings. Heureusement pour nous, nous pourrons réaliser ceci en utilisant des structure de langage PHP rend facile le test pour les variables non initialisees sans avoir ces notices.
PHP, comme la plupart des langages, évalue un argument logique de gauche a droite. pour une condition AND, les deux arguments doivent être satisfaites (a VRAI, TRUE). PHP arrête l’évaluation des qu’il trouve une condition qui n’est pas vraie, ce qui peut dire que pour notre cas, nous pourrons utiliser isset() ou empty() comme premier paramètre d’une condition if.

Pour ceux qui ne le connaissent pas, isset() et empty() sont des structures du langage PHP. Une structure de langage n’est pas une fonction; c’est un peu comme une structure if else ou une boucle while; dans ce cas, isset() et empty() nous permettent de tester des variables pour plusieurs conditions.

Quand utiliser isset()

La structure de langage isset() teste si une variable existe ou non dans le contexte. si une variable a été définie dans le contexte global, sous n’importe quelle forme, excepté NULL, isset() retournera true, sinon elle retournera false.

Vous pouvez utiliser isset() quand vous voulez tester une variable pour une autre condition. Par exemple :

if (isset($variable) && (1 < $variable))
{
     //Faire un traitement
}

if(isset($variable) && (false === $variable))
{
      //Faire un traitement dans ce cas.
}

Si la variable n’est pas “settee”, isset() retournera false. Ceci va faire que la première condition soit a false, et PHP ne va plus évaluer la deuxième  condition (qui, d’ailleurs, émettra une erreur).

Quand utiliser empty()

La structure empty() fonctionne similaire ment a isset(), a une différence : vous utiliserez empty() si vous donner une attention a la valeur de la variable que vous voulez tester, si elle s’évalue  a true ou non. Par exemple:

$variable = false;
if(isset($variable))
{
     echo 'Cette variable est settee.';
}

if(!empty ($variable))
{
     echo 'Cette variable est vide.';
}

Dans le premier exemple, isset() nous indique que la variable est en fait initialisée dans le contexte courant. Par contre, dans le second exemple, la variable est considérée vide, parce que la valeur est false. Ceci est un outil extrêmement important, mais aussi dangereux. False est une valeur absolument valide! (vous pouvez avoir des valeurs de configuration que vous voulez mettre a false par exemple, et vous voulez tester ces variables dans des conditions if bien que leur valeur est false).

Aussi, les chaines de caractères vides, les valeurs “false”, NULL et 0 se résolvent tous a true lorsque vous utilisez empty(). Ceci peut créer des problèmes que vous voulez omettre. Par exemple :

$chaine = "Une chaine a tester.";
$position = strpos($chaine, "Une chaine"); // retourne l'entier 0 pour la premiere position trouvee
if(empty($position))
{
    echo 'Chaine non trouvee..';
}

Cet exemple illustre un cas ou empty() crée un problème. strpos() retourne 0 is elle trouve que la chaine que vous cherchez se trouve au début de la chaine dans laquelle vous voulez chercher. Par contre, elle retourne false si elle ne trouve pas la chaine. Par contre, false et 0 s’évaluent les deux a vide! Vous pourrez réécrire le code ci dessus comme suit:

$chaine = "Une chaine a tester.";
$position = strpos($chaine, "Une chaine"); // retourne l'entier 0 pour la premiere position trouvee.

if(isset($position) && (false === $position))
{
   echo 'Chaine non trouvee';
}

L’utilisation de isset() indique que nous connaissons que la variable existe mais que nous n’évaluons pas encore sa valeur. La seconde condition teste si la valeur de la variable est vraiment a false (en utilisant le signe === qui permet de tester le type et la valeur).

En bref, les règles simples de empty() et isset() sont les suivants

  • Utilisez isset() si vous vous souciez seulement si la variable existe dans le contexte courant.
  • Utilisez empty() si vous vous souciez si la valeur de la variable se considère vide

Anis Berejeb

Anis est avant tout un passioné de l'agilité et du développement. Avec plus de 15 ans dans le domaine du développement web, son expertise combine des connaissances accrues dans l'ensemble des notions partant du développement logiciel jusqu'à l'organisation des équipes dans les environnements agiles à grande échelle.

You may also like...