W3docs

is_object()

La fonction PHP is_object() vérifie si une variable est un objet. Syntaxe, valeur de retour, pièges courants (json_decode, casts, closures) et différence avec instanceof.

Introduction

is_object() est une fonction PHP intégrée qui vérifie si une variable contient un objet — une instance de classe. Elle retourne un booléen, ce qui fait qu'elle est le plus souvent utilisée dans une instruction if pour protéger du code avant d'appeler une méthode ou de lire une propriété sur une valeur dont on n'est pas sûr du type.

Un objet est une valeur créée à partir d'une classe avec new (ou retournée par une fabrique, un pilote de base de données, json_decode(), etc.). Appeler une méthode sur quelque chose qui n'est pas un objet déclenche une Error fatale, donc vérifier d'abord est un schéma défensif courant lors du traitement d'une entrée de forme inconnue.

Syntaxe

is_object(mixed $value): bool
  • $value — la variable à tester. Tout type est accepté.
  • Retourne true si $value est un objet, false pour tout autre type (string, int, array, null, etc.).

Exemple de base

php— editable, runs on the server

Ici $obj est une instance de MyClass, donc is_object() retourne true ; $text est une chaîne, donc elle retourne false.

Pourquoi var_dump et pas echo ? Quand vous faites echo d'un booléen, true s'affiche comme 1 mais false s'affiche comme une chaîne vide — donc echo is_object($text) donne l'impression de n'avoir rien affiché. var_dump() affiche le type explicitement (bool(true) / bool(false)), ce qui rend les vérifications de types bien plus lisibles pendant l'apprentissage.

Protéger un appel de méthode

L'usage réel le plus courant est de protéger du code qui suppose qu'il dispose d'un objet :

<?php
function describe($value): string {
  if (is_object($value)) {
    return "Got an object of class " . get_class($value);
  }
  return "Not an object: " . gettype($value);
}

echo describe(new MyClass()), "\n"; // Got an object of class MyClass
echo describe("hello"), "\n";       // Not an object: string
echo describe([1, 2, 3]), "\n";     // Not an object: array
?>

Combiner is_object() avec get_class() permet de se brancher sur le type concret uniquement lorsque c'est sans danger.

Ce qui compte comme un objet

Certaines valeurs qui semblent être de simples données sont en réalité des objets en PHP :

<?php
var_dump(is_object((object) ["a" => 1]));   // bool(true)  — array cast to stdClass
var_dump(is_object(json_decode('{"a":1}'))); // bool(true)  — default decode returns an object
var_dump(is_object(fn() => 1));              // bool(true)  — closures are Closure objects
var_dump(is_object(null));                   // bool(false)
var_dump(is_object([1, 2, 3]));              // bool(false) — arrays are NOT objects
?>

Les deux derniers sont les pièges habituels : null et les tableaux ne sont pas des objets. Si vous devez les distinguer, utilisez is_null() et is_array().

Fonctions associées

FonctionVérifie
is_object()une instance d'objet
is_array()un tableau
is_string()une chaîne de caractères
is_int()un entier
is_null()la valeur null
gettype()retourne le nom du type sous forme de chaîne

Si vous avez besoin d'un test instanceof pour une classe spécifique plutôt que « tout objet », utilisez l'opérateur instanceof à la place — is_object() vous dit seulement que la valeur est un objet quelconque.

Conclusion

is_object() répond à une question précise : cette valeur est-elle un objet ? Utilisez-la pour protéger l'accès aux méthodes et aux propriétés contre les erreurs fatales que vous obtenez en appelant des méthodes sur des chaînes, des tableaux ou null. N'oubliez pas les surprises — les casts en (object), les résultats de json_decode() et les closures sont tous des objets, tandis que les tableaux et null ne le sont pas. Pour un travail spécifique à un type, utilisez instanceof ; pour un nom de type lisible, utilisez gettype().

Pratique

Pratique
Quel est le rôle de is_object() en PHP ?
Quel est le rôle de is_object() en PHP ?
Was this page helpful?