W3docs

is_object()

La funzione PHP is_object() verifica se una variabile è un oggetto. Sintassi, valore restituito, casi particolari e differenze con instanceof.

Introduzione

is_object() è una funzione PHP integrata che verifica se una variabile contiene un oggetto — un'istanza di una classe. Restituisce un boolean, quindi viene usata più spesso in un'istruzione if per proteggere il codice prima di chiamare un metodo o leggere una proprietà su un valore di cui non si conosce il tipo.

Un oggetto è un valore creato da una classe con new (oppure restituito da una factory, un driver di database, json_decode(), ecc.). Chiamare un metodo su qualcosa che non è un oggetto provoca un Error fatale, quindi verificare prima è un pattern difensivo comune quando si gestisce input di forma sconosciuta.

Sintassi

is_object(mixed $value): bool
  • $value — la variabile da testare. Viene accettato qualsiasi tipo.
  • Restituisce true se $value è un oggetto, false per ogni altro tipo (string, int, array, null, ecc.).

Esempio di base

php— editable, runs on the server

Qui $obj è un'istanza di MyClass, quindi is_object() restituisce true; $text è una string, quindi restituisce false.

Perché var_dump e non echo? Quando si usa echo su un boolean, true viene stampato come 1 ma false viene stampato come stringa vuota — quindi echo is_object($text) sembra non stampare nulla. var_dump() mostra il tipo in modo esplicito (bool(true) / bool(false)), rendendo i controlli di tipo molto più semplici da leggere durante l'apprendimento.

Proteggere una chiamata a un metodo

L'uso reale più comune è proteggere il codice che presuppone di avere un oggetto:

<?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
?>

Abbinare is_object() a get_class() consente di ramificare sul tipo concreto solo quando è sicuro farlo.

Cosa conta come oggetto

Alcuni valori che sembrano dati semplici sono in realtà oggetti in 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
?>

Gli ultimi due sono i casi particolari più comuni: null e gli array non sono oggetti. Se è necessario distinguerli, usa is_null() e is_array().

Funzioni correlate

FunzioneControlla
is_object()un'istanza di oggetto
is_array()un array
is_string()una string
is_int()un intero
is_null()il valore null
gettype()restituisce il nome del tipo come string

Se hai bisogno di un test instanceof per una classe specifica anziché "qualsiasi oggetto", usa l'operatore instanceofis_object() ti dice solo che il valore è qualche oggetto.

Conclusione

is_object() risponde a una sola domanda precisa: questo valore è un oggetto? Usala per proteggere l'accesso a metodi e proprietà dagli errori fatali che si ottengono chiamando metodi su string, array o null. Ricorda i casi particolari — i cast a (object), i risultati di json_decode() e le closure sono tutti oggetti, mentre gli array e null non lo sono. Per lavoro specifico sul tipo, usa instanceof; per un nome di tipo leggibile, usa gettype().

Esercitazione

Pratica
Qual è la funzione di is_object() in PHP?
Qual è la funzione di is_object() in PHP?
Was this page helpful?