Étude de cas : Tester si une variable est vide en PHP
Par Méthylbro le mercredi 21 octobre 2009, 08:00 - Tutoriels - Lien permanent
Comme je vous l'ai déjà dit hier, je suis en train de devoir modifier toute une série de script écrit en PHP par d'autres développeurs.
Si hier l'inutilité d'ouvrir des flux à tout bout de champ vers des fichiers m'a pour le moins amusé, aujourd'hui je commence à être agacé par tout ce que je peu voir.

Pour tester si une variable est vide, beaucoup trop souvent les jeunes développeurs s'arrêtent à la solution suivante :
if ($myVar=="")
echo 'ma variable est vide';
Alors qu'en réalité l'assertion $myVar=="" ne signifie pas du tout la variable $myVar est vide
mais la variable $myVar est une chaîne de caractères vide
.
On trouve ce genre d'assertion partout dans beaucoup de script. Pourtant qu'adviendrait il de notre script si $myVar avait une valeur à entier:0 dès le départ ?
$myVar = 0;
if ($myVar=="")
echo 'ma variable est vide';
Ou mieux, si $myVar était null ?
$myVar = null;
if ($myVar=="")
echo 'ma variable est vide';
Pourtant dans ce dernier cas, $myVar est réellement vide, puisqu'elle n'a aucune valeur. Mais l'assertion $myVar=="" ne se vérifie pas. Donc peut on considérer que $myVar=="" signifie que $myVar est une variable vide
?
Si vous souhaitez tester si une variable est vide
, utilisez plutôt la fonction empty() :
if (empty($myVar))
echo 'ma variable est vide';
Si vous considérez une chaîne de caractères composée seulement d'espace comme vide, vous pouvez alors utiliser la fonction trim() au préalable. Prenons un exemple concret trouvé dans le script qui m'a inspiré ce billet :
if ($nick != "" && $text != "" && $nick != " " && $text != " ") {}
Nous effacerons les espaces en début et fin de chaîne avec la fonction trim() avant de tester le résultat avec empty() dans une condition :
$nick = trim($nick, ' ');
$text = trim($text, ' ');
if (!empty($nick) && !empty($text)) {}
Commentaires
D'accord sur toute la ligne, avis aux débutants (nous l'avons tous été un jour) !
@BW HadèS : Non, je ne suis pas d'accord. Moi j'ai jamais été débutant.
J'ai tout de suite été un dieu, depuis le premier jour ^^
Rho, sois pas trop modeste quand même...