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 issetisset($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)) {...} J’ai préparé un guide pratique avec une dizaine de conseils essentiels pour poser de bonnes bases.
👉 Bonnes pratiques, astuces spécifiques à PHP, exemples concrets… tout y est pour prendre de suite les bonnes habitudes.