OUJOOD.COM
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.
<?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.
<?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() :
<?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