W3docs

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 true se $value for um objeto, false para qualquer outro tipo (string, int, array, null, etc.).

Exemplo básico

php— editable, runs on the server

Aqui, $obj é uma instância de MyClass, portanto is_object() retorna true; $text é uma string, portanto retorna false.

Por que var_dump e não echo? Quando você usa echo em um boolean, true é impresso como 1, mas false é impresso como uma string vazia — portanto echo 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çãoVerifica
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 instanceofis_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().

Prática

Prática
Qual é a função de is_object() em PHP?
Qual é a função de is_object() em PHP?
Was this page helpful?