W3docs

is_object()

La función is_object() de PHP comprueba si una variable es un objeto. Aprende su sintaxis, valor de retorno, casos especiales y diferencias con instanceof.

Introducción

is_object() es una función integrada de PHP que comprueba si una variable contiene un objeto — una instancia de una clase. Devuelve un boolean, por lo que se usa con más frecuencia en una instrucción if para proteger el código antes de llamar a un método o leer una propiedad sobre un valor cuyo tipo no se conoce con certeza.

Un objeto es un valor creado a partir de una clase con new (o devuelto por una factoría, un controlador de base de datos, json_decode(), etc.). Llamar a un método sobre algo que no es un objeto provoca un Error fatal, por lo que verificar primero es un patrón defensivo habitual cuando se manejan entradas de forma desconocida.

Sintaxis

is_object(mixed $value): bool
  • $value — la variable a comprobar. Se acepta cualquier tipo.
  • Devuelve true si $value es un objeto, false para cualquier otro tipo (string, int, array, null, etc.).

Ejemplo básico

php— editable, runs on the server

Aquí $obj es una instancia de MyClass, por lo que is_object() devuelve true; $text es una string, por lo que devuelve false.

¿Por qué var_dump y no echo? Cuando haces echo de un boolean, true se imprime como 1 pero false se imprime como una cadena vacía — así que echo is_object($text) parece que no imprimió nada. var_dump() muestra el tipo de forma explícita (bool(true) / bool(false)), lo que facilita mucho la lectura de comprobaciones de tipo durante el aprendizaje.

Proteger una llamada a método

El uso real más común es proteger el código que asume que tiene un 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() con get_class() permite ramificar según el tipo concreto solo cuando es seguro hacerlo.

Qué se considera un objeto

Algunos valores que parecen datos simples son en realidad objetos 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
?>

Los dos últimos son los casos habituales de error: null y los arrays no son objetos. Si necesitas distinguirlos, usa is_null() e is_array().

Funciones relacionadas

FunciónComprueba
is_object()una instancia de objeto
is_array()un array
is_string()una string
is_int()un entero
is_null()el valor null
gettype()devuelve el nombre del tipo como string

Si necesitas una prueba instanceof para una clase específica en lugar de "cualquier objeto", usa el operador instanceofis_object() solo te indica que el valor es algún objeto.

Conclusión

is_object() responde a una pregunta concreta: ¿es este valor un objeto? Úsala para proteger el acceso a métodos y propiedades frente a los errores fatales que se producen al llamar métodos sobre strings, arrays o null. Recuerda los casos especiales: las conversiones a (object), los resultados de json_decode() y los closures son todos objetos, mientras que los arrays y null no lo son. Para trabajo específico por tipo, recurre a instanceof; para obtener el nombre legible del tipo, recurre a gettype().

Práctica

Práctica
¿Cuál es la función de is_object() en PHP?
¿Cuál es la función de is_object() en PHP?
Was this page helpful?