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
*/
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 :
$var === 0
$var === ''
null
?$var = null;
...
if ($var === null) {...}
null
, il faut alors utiliser la fonction isset
isset($var)
C'est simple non ?
Mon programme "S'entraîner pour progresser en PHP" a ouvert 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.