Operador instanceof y herencia en POO en PHP
Analicemos las características de la herencia al usar
el operador instanceof. Supongamos que tenemos una clase padre
y una clase hija:
<?php
// Clase padre:
class ParentClass
{
}
// Clase hija:
class ChildClass extends ParentClass
{
}
?>
Creemos un objeto de la clase hija:
<?php
$obj = new ChildClass;
?>
Ahora verifiquemos usando instanceof,
si nuestro objeto pertenece a la clase ParentClass
y a la clase ChildClass:
<?php
var_dump($obj instanceof ChildClass); // devolverá true
var_dump($obj instanceof ParentClass); // también devolverá true
?>
Como puede ver en el ejemplo, el operador instanceof
no hace distinción al verificar entre clases padre
y clases hija.
No se confunda: si el objeto es realmente
de la clase padre, entonces, por supuesto, la verificación
de pertenencia a la clase hija devolverá
false:
<?php
$obj = new ParentClass; // objeto de la clase padre
var_dump($obj instanceof ParentClass); // devolverá true
var_dump($obj instanceof ChildClass); // devolverá false
?>
Cree una clase User con propiedades públicas
name y surname.
Cree una clase Employee que
herede de la clase User y agregue
la propiedad salary.
Cree una clase City con propiedades públicas
name y population.
Cree 3 objetos de la clase User,
3 objetos de la clase Employee,
3 objetos de la clase City, y
en un orden arbitrario, guárdelos en un array
$arr.
Recorra en ciclo el array $arr y muestre
en pantalla la columna de propiedades name de aquellos
objetos que pertenezcan a la clase User
o a una clase descendiente de esta.
Recorra en ciclo el array $arr y muestre
en pantalla la columna de propiedades name de aquellos
objetos que no pertenezcan a la clase User
o a una clase descendiente de esta.
Recorra en ciclo el array $arr y muestre
en pantalla la columna de propiedades name de aquellos
objetos que pertenezcan específicamente a la clase
User, es decir, que no sean de la clase City
ni de la clase Employee.