W3docs

empty()

La fonction empty() en PHP vérifie si une variable est vide : inexistante ou ayant une valeur nulle, fausse ou égale à zéro.

Introduction

empty() est une construction du langage PHP qui vous indique si une variable est « vide » — c'est-à-dire si elle ne contient aucune valeur significative. Elle est le plus souvent utilisée pour se prémunir contre des champs de formulaire manquants, des clés de tableau absentes et des variables non initialisées avant que votre code tente de les utiliser.

L'essentiel à comprendre est que empty($var) est essentiellement un raccourci pour !isset($var) || $var == false. En d'autres termes, une variable est vide lorsqu'elle n'existe pas ou que sa valeur est l'une des valeurs « falsy » de PHP. Cette page explique exactement quelles valeurs sont considérées comme vides, les pièges courants, et quand utiliser empty() plutôt que isset() ou is_null().

Syntaxe

bool empty(mixed $var)

empty() prend un seul argument, $var, et retourne un boolean : true si la variable est considérée comme vide, false dans le cas contraire. Comme il s'agit d'une construction du langage et non d'une fonction ordinaire, elle peut être utilisée directement sur des variables qui n'existent peut-être pas sans déclencher d'avertissement.

Remarque : Avant PHP 5.5, empty() n'acceptait qu'une variable. PHP moderne autorise aussi des expressions, par exemple empty(trim($name)).

Quelles valeurs sont « vides » ?

Une variable est vide lorsqu'elle n'existe pas, ou lorsque sa valeur est l'une des suivantes :

Valeurempty() retourne
"" (string vide)true
"0" (string zéro)true
0 (entier zéro)true
0.0 (flottant zéro)true
nulltrue
falsetrue
[] (array vide)true
variable non définietrue
toute string non vide (ex. "hello")false
tout nombre non nulfalse
un array non videfalse

Il s'agit exactement de l'ensemble des valeurs que PHP traite comme false dans un contexte boolean, plus le cas où la variable n'est pas définie.

Exemple d'utilisation

empty() n'affiche rien pour false/0 et 1 pour true avec echo, donc cet exemple convertit le résultat en label entier pour plus de clarté.

php— editable, runs on the server

Nous définissons ici six variables de types différents : $var1 est une string vide, $var2 est une string non vide, $var3 est null, $var4 est 0, $var5 est la string "0", et $var6 est un array vide. empty() retourne true pour toutes sauf $var2. Notez qu'echo affiche 1 pour true et une string vide pour false ; nous ajoutons 0-vs-1 dans les commentaires pour rendre le résultat lisible.

Pièges courants

"0" est considéré comme vide

C'est la surprise la plus fréquente. La string "0" est vide selon empty(), même si elle contient clairement un caractère. Cela est important pour les saisies de formulaire : un utilisateur qui tape 0 dans un champ de quantité ou d'âge verra sa saisie rejetée si vous validez avec empty().

<?php
$age = "0";                       // a perfectly valid age from a form
var_dump(empty($age));            // bool(true)  -- oops, treated as missing
var_dump($age === "");            // bool(false) -- the field was NOT blank
?>

Si vous souhaitez seulement rejeter un champ vide, comparez avec "" ou utilisez isset() avec une vérification de longueur à la place de empty().

empty() ne génère pas d'avertissement pour les variables ou clés non définies

Contrairement à l'accès direct à une variable, empty() peut être appelée en toute sécurité sur quelque chose qui n'existe peut-être pas. Elle retourne true et n'émet aucun avertissement.

<?php
$config = ["timeout" => 30];

var_dump(empty($config["timeout"]));  // bool(false) -- key exists, value is 30
var_dump(empty($config["retries"]));  // bool(true)  -- key missing, no warning
var_dump(empty($undeclared));         // bool(true)  -- no "undefined variable" notice
?>

Cela fait de empty() un outil idéal pour vérifier des clés de tableau optionnelles, comme les valeurs $_POST ou $_GET, sans appeler isset() au préalable.

empty() vs isset() vs is_null()

Ces trois fonctions sont faciles à confondre. La différence réside dans les états qu'elles traitent comme « aucune valeur » :

État de la variableempty()isset()is_null()
non déclaréetruefalseavertissement + true
nulltruefalsetrue
"", 0, "0", []truetruefalse
"hello", 42falsetruefalse

En résumé :

  • Utilisez isset() lorsque vous voulez seulement savoir si une variable existe et n'est pas null.
  • Utilisez empty() lorsque vous voulez savoir s'il existe une valeur utilisable (sans chercher à distinguer 0/""/manquant).
  • Utilisez is_null() lorsque vous devez spécifiquement détecter null.

Un garde-fou typique dans le monde réel pour un champ de formulaire optionnel ressemble à ceci :

<?php
$_POST = ["username" => "  "];   // simulate a submitted form with a blank-ish field

if (empty(trim($_POST["username"] ?? ""))) {
    echo "Username is required";
} else {
    echo "Welcome, " . trim($_POST["username"]);
}
?>

Sortie :

Username is required

Ici, ?? "" fournit une valeur par défaut si la clé est absente, trim() supprime les espaces d'une saisie composée uniquement d'espaces, et empty() capture à la fois les cas manquants et les cas vides.

Conclusion

empty() est un garde-fou pratique pour vérifier si une variable contient une valeur significative, et elle peut être utilisée en toute sécurité sur des variables et des clés de tableau qui n'existent peut-être pas. Son principal inconvénient est que "0", 0 et les strings vides sont tous considérés comme vides, ce qui en fait le mauvais outil lorsque zéro est une valeur légitime — préférez alors isset() ou une comparaison explicite. Pour inspecter exactement ce que contient une variable lors du débogage, associez-la à var_dump() ou gettype().

Pratique

Pratique
En PHP, quelles caractéristiques possède la fonction 'empty()' ?
En PHP, quelles caractéristiques possède la fonction 'empty()' ?
Was this page helpful?