Operador instanceof e herança em OOP em PHP
Vamos analisar as características da herança ao usar
o operador instanceof. Suponha que temos uma classe pai
e uma classe filha:
<?php
// Classe pai:
class ParentClass
{
}
// Classe filha:
class ChildClass extends ParentClass
{
}
?>
Vamos criar um objeto da classe filha:
<?php
$obj = new ChildClass;
?>
Agora, vamos verificar usando instanceof
se nosso objeto pertence à classe ParentClass
e à classe ChildClass:
<?php
var_dump($obj instanceof ChildClass); // exibirá true
var_dump($obj instanceof ParentClass); // também exibirá true
?>
Como você pode ver no exemplo - o operador instanceof
não faz distinção na verificação entre classes pai
e classes filhas.
Não se confunda - se o objeto for realmente
da classe pai, então, é claro, a verificação
de pertencimento à classe filha retornará
false:
<?php
$obj = new ParentClass; // objeto da classe pai
var_dump($obj instanceof ParentClass); // exibirá true
var_dump($obj instanceof ChildClass); // exibirá false
?>
Crie uma classe User com as propriedades públicas
name e surname.
Crie uma classe Employee que
herde da classe User e adicione
a propriedade salary.
Crie uma classe City com as propriedades públicas
name e population.
Crie 3 objetos da classe User,
3 objetos da classe Employee,
3 objetos da classe City, e
em uma ordem aleatória, armazene-os no array
$arr.
Percorra o array $arr com um loop e exiba
na tela uma coluna com as propriedades name
daqueles objetos que pertencem à classe User
ou a uma classe descendente desta.
Percorra o array $arr com um loop e exiba
na tela uma coluna com as propriedades name
daqueles objetos que *não* pertencem à classe User
ou a uma classe descendente desta.
Percorra o array $arr com um loop e exiba
na tela uma coluna com as propriedades name
daqueles objetos que pertencem especificamente à classe
User, ou seja, que não são da classe City
e nem da classe Employee.