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
truesi$valuees un objeto,falsepara cualquier otro tipo (string, int, array,null, etc.).
Ejemplo básico
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_dumpy noecho? Cuando hacesechode un boolean,truese imprime como1perofalsese imprime como una cadena vacía — así queecho 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ón | Comprueba |
|---|---|
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 instanceof — is_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().