La fonction empty en PHP : 5 cas d’usage pratiques

La fonction empty en PHP fait partie des outils les plus utilisés en PHP pour déterminer si une variable est « vide ». Simple en apparence, elle cache des subtilités importantes qui peuvent surprendre même les développeurs expérimentés. Cet article détaille sa signature exacte, son fonctionnement technique et ses cas d’usage concrets dans le développement web quotidien.La fonction empty() suit une syntaxe volontairement simple qui en fait un réflexe naturel pour beaucoup de développeurs PHP.

Syntaxe officielle pour la fonction empty en PHP

bool empty ( mixed $var )

La fonction prend un seul paramètre $var de type mixed, c’est-à-dire n’importe quel type de variable PHP (string, int, array, object, etc.). Elle retourne un booléen : true si la variable est considérée comme vide, false sinon. Depuis PHP 5.5, empty() accepte aussi des expressions simples, pas seulement des variables.

Exemple basique :

$texte = '';
var_dump(empty($texte)); // bool(true)

$nombre = 42;
var_dump(empty($nombre)); // bool(false)

Particularité importante

Contrairement à isset()empty() ne génère jamais de notice, même si vous testez une variable inexistante. C’est un avantage pratique pour les superglobales comme $_POST ou $_GET.Les différences entre isset et empty sont importantes à connaitre.

Exemple :

var_dump(empty($_POST['champ_inexistant'])); // bool(true) SANS notice

Cette tolérance aux variables non définies fait de empty() un outil sûr, mais attention à bien comprendre ce qu’elle considère comme « vide ».

Quelles valeurs sont vides selon PHP ?

La vraie puissance (et complexité) de empty() réside dans sa définition de « vide ». PHP considère huit cas distincts comme vides.

Les 8 valeurs qui déclenchent true

""          (chaîne vide)
"0"         (chaîne représentant zéro)
0           (entier zéro)
0.0         (float zéro)
NULL        (valeur nulle)
FALSE       (booléen faux)
array()     (tableau vide)
$objet;     (propriété d'objet non initialisée)

Test complet :

$tests = ['', '0', 0, 0.0, null, false, [], 'test'];
foreach ($tests as $test) {
    echo $test . ' → ' . (empty($test) ? 'VIDE' : 'PLEIN') . "\n";
}
// Affiche : VIDE VIDE VIDE VIDE VIDE VIDE VIDE PLEIN

Différence clé avec isset()

Valeurisset()empty()Contexte typique
Non définiefalsetrue
nullfalsetrueConfiguration
''truetrueFormulaire texte
0truetrue ⚠️Compteur quantité
falsetruetrue ⚠️Toggle ON/OFF

Cette différence crée souvent des pièges subtils qu’il faut maîtriser.

5 cas d’usage principaux de empty()

empty() brille dans des situations métier précises où vous voulez vérifier si une valeur est exploitable.

1. Validation des champs texte de formulaire

<?php
if (isset($_POST['submit'])) {
    $nom = $_POST['nom'] ?? '';
    
    if (empty($nom)) {
        $erreurs[] = "Le nom est obligatoire.";
    }
    
    if (empty($erreurs)) {
        echo "Formulaire valide !";
    }
}
?>

Pourquoi ça marche ? L’utilisateur qui laisse un champ vide envoie '', et empty('') retourne true. Logique métier parfaite.

2. Filtres et moteurs de recherche

<?php
$motcle = $_GET['q'] ?? '';

if (empty($motcle)) {
    // Pas de recherche → afficher tous les produits
    $produits = getTousLesProduits();
} else {
    // Recherche spécifique
    $produits = rechercherProduits($motcle);
}
?>

Un mot-clé vide ne doit pas lancer de requête inutile. empty() gère parfaitement ce cas.

3. Vérification des résultats de base de données

<?php
$utilisateurs = getUtilisateursActifs();

if (empty($utilisateurs)) {
    echo "Aucun utilisateur actif trouvé.";
} else {
    echo "Affichage de " . count($utilisateurs) . " utilisateurs.";
}
?>

empty() teste à la fois « tableau vide » et « résultat absent ». Très pratique.

4. Gestion de cache

<?php
$cache = $_SESSION['cache'] ?? [];

if (empty($cache['homepage'])) {
    $cache['homepage'] = genererPageAccueil();
    $_SESSION['cache'] = $cache;
}
?>

Si le cache est vide pour une page, on le régénère. Classique et efficace.

5. Configuration optionnelle

<?php
$config = require 'config.php';

if (empty($config['debug'])) {
    error_reporting(0);
} else {
    ini_set('display_errors', 1);
}
?>

Une config absente ou vide = debug désactivé. Simple et sûr.

Les pièges d(empty() à connaître absolument

Malgré ses qualités, empty() présente trois pièges majeurs.

Le problème du zéro légitime

<?php
$quantite = 0; // Produit gratuit (promo légitime)

if (!empty($quantite)) {
    // ❌ CETTE CONDITION NE S'EXÉCUTE JAMAIS !
    traiterPanier($quantite);
} else {
    echo "Panier ignoré ❌"; // Problème métier !
}
?>

Solution : isset($quantite) pour les compteurs où 0 est valide.

Les booléens trompeurs

<?php
$public = false; // Choix volontaire "profil privé"

if (!empty($public)) {
    // ❌ JAMAIS exécuté malgré un choix utilisateur explicite
    afficherProfilPublic();
}
?>

Solution : isset($public) pour les toggles booléens.

Bonnes pratiques recommandées

Quand utiliser empty()

✅ Parfait pour : Champs texte, recherche, tableaux résultats, cache
✅ OK avec : Superglobales ($_POST, $_GET)
❌ Éviter pour : Compteurs (0 valide), booléens (false valide)

Code idéal pour les formulaires

<?php
// Meilleure pratique : combiner isset() + empty()
if (isset($_POST['age']) && !empty($_POST['age']) && is_numeric($_POST['age'])) {
    $age = (int)$_POST['age'];
    if ($age > 0) {
        echo "Âge valide : $age ans";
    }
}
?>

Alternatives modernes (PHP 7+)

Pour du code plus explicite, préférez :

<?php
// Au lieu de empty()
$nom = $_POST['nom'] ?? '';
if ($nom === '') {
    $erreurs[] = "Nom requis";
}

// Pour les tableaux
if (!array_filter($utilisateurs)) {
    echo "Aucun utilisateur actif";
}
?>

Conclusion

La fonction empty() excelle pour vérifier si une valeur est pratique dans des contextes comme les formulaires texte, les recherches ou les résultats de base de données. Cependant, elle piége avec les zéros et booléens légitimes où isset() est préférable.

Règle d’or : empty() teste le contenu utileisset() teste l’existence. Utilisez-les en complément selon votre besoin métier précis.

Sources: php.net

Cours

Variables et types

Manipulation de chaînes

Tableaux

Fichiers et système

Sécurité, session et cookie