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 ?
Si par exemple, vous voulez tester que votre variable est différente de null
et que ce n'est pas une chaîne vide, vous pouvez soit combiner les deux conditions :
if ($var !== null && $var !== '')
Soit créer une méthode privée au nom explicite qui va faire ce contrôle
private function isTokenValid(?string $token): bool
{
return $token !== null && $token !== '';
}
// dans la condition
if ($this->isTokenValid($var)) {...}
Mon programme "S'entraîner pour progresser en PHP" est disponible. Il vous permettra de recevoir chaque semaine un kata de code directement dans votre boîte mail, ainsi que des aides à la réalisation, des vidéos explicatives et des défis supplémentaires.