Tester qu'un tableau est vide

Il existe plusieurs manières pour tester qu'un tableau est vide en PHP, et celle que je vois le plus souvent est :

$var = [];

if (empty($var)) { ... }

En lisant le code, on sait tout de suite ce qu'il fait, le nom de la fonction est assez explicite. Mais le problème est l'utilisation de la fonction empty qui ne sert pas qu'à tester les tableaux !

Savez-vous qu'utilisez empty revient à écrire :

$var = [];

if (
    isset($var) === false
    || $var === false
    || $var === 0
    || $var === -0
    || $var === 0.0
    || $var === -0.0
    || $var === ''
    || $var === '0'
    || $var === []
) { ... }

On voit bien ici qu'on peut utiliser empty pour tester aussi qu'un entier est égale à 0, ou qu'une chaîne est vide. Et c'est bien le soucis de cette fonction : elle fait trop de choses et peut causer de nombreux bugs.

Par exemple, un test avec empty d'une variable non déclarée retourne true sans erreurs ! Donc un bug peut se glisser si vous vous trompez dans le nom de votre variable :

$var = [1, 2, 3];

var_dump(
    empty($errorVar)
); // bool(true)

Il est donc préférable de tester directement la valeur attendu :

var_dump(
    $errorVar === []
); // bool(false)
/*
 * En php < 8 : Notice: Undefined variable: myErrorVar in /in/Nm3CT on line 8
 * En php >= 8 : Warning: Undefined variable $myErrorVar in /in/Nm3CT on line 8
 */

Quel est la bonne méthode alors ?

Pour tester qu'un tableau est vide, je vous conseille plutôt d'utiliser l'une des propositions ci-dessous.

$var = [];

if (count($var) === 0) {...}
// ou 
if (sizeof($var) === 0) {...}

Ma solution préférée :

$var = [];

if ($var === []) {...}

Et plus généralement, je vous conseille de bannir la fonction empty de votre vocabulaire et de votre quotidien :

  • Vous voulez tester qu'un entier est égal à 0 ?
$var === 0
  • Vous voulez tester qu'une chaîne est vide ?
$var === ''
  • Vous voulez tester qu'une variable préalablement déclarée et initialisée est égale à null ?
$var = null;
...

if ($var === null) {...}
  • Si vous voulez tester qu'une variable existe et est différente de null, il faut alors utiliser la fonction isset
isset($var)

C'est simple non ?

Tu aimerais progresser en PHP ? Mais tu ne sais pas comment t'y prendre ?

S'entraîner pour progresser en PHP

Mon programme "S'entraîner pour progresser en PHP" va bientôt ouvrir ses portes. Il te permettra de recevoir chaque semaine un kata de code directement dans ta boîte mail, ainsi que des aides à la réalisation, des vidéos explicatives, voire des live coding et de la review.

Si tu es intéressé(e), clique sur le bouton ci-dessous pour avoir plus d'informations et t'inscrire afin d'être prévenu(e) de l'ouverture de ce programme.