instanceof es usado para determinar si una variable PHP es una instancia de objeto de cierta clase:
Example#1 Uso de instanceof con clases
<?php
class MiClase
{
}
class NoMiClase
{
}
$a = new MiClase;
var_dump($a instanceof MiClase);
var_dump($a instanceof NoMiClase);
?>
El resultado del ejemplo seria:
bool(true) bool(false)
Example#2 Uso de instanceof con clases heredadas
<?php
class ClasePadre
{
}
class MiClase extends ClasePadre
{
}
$a = new MiClase;
var_dump($a instanceof MiClase);
var_dump($a instanceof ClasePadre);
?>
El resultado del ejemplo seria:
bool(true) bool(true)
Example#3 Uso de instanceof para una clase
<?php
interface MiInterfaz
{
}
class MiClase implements MiInterfaz
{
}
$a = new MiClase;
var_dump($a instanceof MiClase);
var_dump($a instanceof MiInterfaz);
?>
El resultado del ejemplo seria:
bool(true) bool(true)
Aunque instanceof es usado por lo general con un nombre de clase literal, también puede usarse con otro objeto o una variable tipo cadena:
Example#4 Uso de instanceof con otras variables
<?php
interface MiInterfaz
{
}
class MiClase implements MiInterfaz
{
}
$a = new MiClase;
$b = new MiClase;
$c = 'MiClase';
$d = 'NoMiClase';
var_dump($a instanceof $b); // $b es un objeto de la clase MiClase
var_dump($a instanceof $c); // $c es una cadena 'MiClase'
var_dump($a instanceof $d); // $d es una cadena 'NoMiClase'
?>
El resultado del ejemplo seria:
bool(true) bool(true) bool(false)
Hay algunas trampas comunes de las que hay que tener cuidado. En versiones anteriores a PHP 5.1.0, instanceof llamaría __autoload() si el nombre de clase no existía. Adicionalmente, si la clase no estaba cargada, ocurriría un error fatal. Esto puede ser evitado usando una referencia dinámica de clase, o una variable tipo cadena que contenga el nombre de clase:
Example#5 Evitar búsquedas de nombres de clase y errores fatales con instanceof en PHP 5.0
<?php
$d = 'NoMiClase';
var_dump($a instanceof $d); // no acurre un error fatal aquí
?>
El resultado del ejemplo seria:
bool(false)
El operador instanceof fue introducido en PHP 5. Anteriormente is_a() era usado, pero desde entonces is_a() ha sido marcada como función obsoleta, prefiriéndose el uso de instanceof.
Vea también get_class() e is_a().