is_object()
A função PHP is_object() verifica se uma variável é um objeto. Aprenda sua sintaxe, valor de retorno, armadilhas comuns e diferenças do instanceof.
Introdução
is_object() é uma função PHP integrada que verifica se uma variável contém um objeto — uma instância de uma classe. Ela retorna um boolean, portanto é usada com mais frequência em uma instrução if para proteger o código antes de chamar um método ou ler uma propriedade de um valor cujo tipo não se tem certeza.
Um objeto é um valor criado a partir de uma classe com new (ou retornado por uma fábrica, um driver de banco de dados, json_decode(), etc.). Chamar um método em algo que não é um objeto gera um Error fatal, portanto verificar primeiro é um padrão defensivo comum ao lidar com entradas de formato desconhecido.
Sintaxe
is_object(mixed $value): bool$value— a variável a ser testada. Qualquer tipo é aceito.- Retorna
truese$valuefor um objeto,falsepara qualquer outro tipo (string, int, array,null, etc.).
Exemplo básico
Aqui, $obj é uma instância de MyClass, portanto is_object() retorna true; $text é uma string, portanto retorna false.
Por que
var_dumpe nãoecho? Quando você usaechoem um boolean,trueé impresso como1, masfalseé impresso como uma string vazia — portantoecho is_object($text)parece que não imprimiu nada.var_dump()mostra o tipo explicitamente (bool(true)/bool(false)), o que torna as verificações de tipo muito mais fáceis de ler durante o aprendizado.
Protegendo uma chamada de método
O uso real mais comum é proteger código que assume que possui um objeto:
<?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
?>Combinar is_object() com get_class() permite ramificar no tipo concreto apenas quando é seguro fazê-lo.
O que conta como objeto
Alguns valores que parecem ser dados simples são na verdade objetos em 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
?>Os dois últimos são as armadilhas habituais: null e arrays não são objetos. Se você precisar distingui-los, use is_null() e is_array().
Funções relacionadas
| Função | Verifica |
|---|---|
is_object() | uma instância de objeto |
is_array() | um array |
is_string() | uma string |
is_int() | um inteiro |
is_null() | o valor null |
gettype() | retorna o nome do tipo como string |
Se você precisar de um teste instanceof para uma classe específica em vez de "qualquer objeto", use o operador instanceof — is_object() apenas informa que o valor é algum objeto.
Conclusão
is_object() responde a uma pergunta específica: este valor é um objeto? Use-a para proteger o acesso a métodos e propriedades contra os erros fatais que você obtém ao chamar métodos em strings, arrays ou null. Lembre-se das surpresas — conversões para (object), resultados de json_decode() e closures são todos objetos, enquanto arrays e null não são. Para trabalho específico de tipo, use instanceof; para um nome de tipo legível, use gettype().