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
truese$valueè un oggetto,falseper ogni altro tipo (string, int, array,null, ecc.).
Esempio di base
Qui $obj è un'istanza di MyClass, quindi is_object() restituisce true; $text è una string, quindi restituisce false.
Perché
var_dumpe nonecho? Quando si usaechosu un boolean,trueviene stampato come1mafalseviene stampato come stringa vuota — quindiecho 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
| Funzione | Controlla |
|---|---|
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 instanceof — is_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().