Forum und email

Operadores de Tipo

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)
instanceof puede ser usado también para determinar si una variable es una instancia de objeto de una clase que hereda de una clase padre:

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)
Por último, instanceof puede ser usado también para determinar si una variable es una instancia de objeto de una clase que implementa una interfaz:

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().