logo oujood
🔍

La fonction is_object() en PHP

is_object() vérifie si une variable est de type objet et retourne true ou false. Utile pour valider les paramètres avant d'accéder à leurs propriétés.

OUJOOD.COM

PHP cours tutorial

La fonction is_object()

(PHP 4, PHP 5, PHP 7, PHP 8 — testé jusqu'à PHP 8.5)

is_object() vérifie si une variable est de type objet. Elle retourne true si c'est le cas, false dans tous les autres cas — y compris pour null, un tableau ou une valeur scalaire.

Syntaxe :

bool is_object(mixed $var)

Le paramètre $var est la variable à tester. La fonction ne modifie pas la variable et ne déclenche aucune erreur, quelle que soit la valeur passée.

Exemple 1 : validation d'un paramètre avant accès à ses propriétés

Accéder à une propriété sur une variable qui n'est pas un objet génère une erreur fatale. Un test is_object() en amont évite ce problème, notamment quand la valeur vient de l'extérieur — résultat d'une requête SQL, paramètre de fonction, données JSON décodées.

  📋 Copier le code

<?php
// Retourne le tableau students si $obj est bien un objet, false sinon
function get_students($obj) {
    if (!is_object($obj)) {
        return false;
    }
    return $obj->students;
}

// Création d'un objet stdClass avec une propriété
$obj = new stdClass();
$obj->students = ['Kalle', 'Ross', 'Felipe'];

var_dump(get_students(null)); // bool(false) — null n'est pas un objet
var_dump(get_students($obj)); // array(3) { ... }
?>

Exemple 2 : détecter si $this est une instance

is_object($this) permet de distinguer un appel depuis une instance d'un appel statique. En PHP moderne, les méthodes statiques n'ont pas accès à $this, mais cette vérification reste utile dans du code legacy ou des architectures mixtes.

  📋 Copier le code

<?php
class MaClasse {
    function test() {
        if (is_object($this)) {
            // Appelé depuis une instance
            echo "C'est une instance<br>\n";
        } else {
            // Appelé de façon statique (PHP < 8) ou procédurale
            echo "Ce n'est pas une instance<br>\n";
        }
    }
}

$inst = new MaClasse();
$inst->test(); // Affiche : C'est une instance
?>

Cas particulier : objets désérialisés et __PHP_Incomplete_Class

Quand unserialize() rencontre une classe inconnue — soit parce qu'elle n'est pas chargée, soit parce qu'elle est explicitement exclue via allowed_classes — PHP crée un objet de type __PHP_Incomplete_Class.

Depuis PHP 7.2, is_object() retourne true sur ces objets incomplets. Avant PHP 7.2, elle retournait false — ce comportement est donc définitivement corrigé sur toutes les versions actuelles (PHP 8.x).

Pour détecter spécifiquement un objet incomplet et éviter d'appeler des méthodes dessus, utilisez get_class() :

  📋 Copier le code

<?php
// Désérialisation d'une classe non chargée
$obj = unserialize('O:16:"ClasseInconnue":0:{}');

var_dump(is_object($obj)); // bool(true) depuis PHP 7.2
var_dump(get_class($obj)); // string(21) "__PHP_Incomplete_Class"

// Vérification complète avant utilisation
if (is_object($obj) && get_class($obj) !== '__PHP_Incomplete_Class') {
    // Objet utilisable normalement
    echo "Objet valide\n";
} else {
    echo "Objet incomplet — classe non chargée\n";
}
?>

Par carabde 20 août 2014 | Mis à jour le 22 mai 2026