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:

index.php<?php
  // Classe pai:
  class ParentClass
  {
    
  }
  
  // Classe filha:
  class ChildClass extends ParentClass
  {
    
  }
?>

Vamos criar um objeto da classe filha:

index.php<?php
  $obj = new ChildClass;
?>

Agora, vamos verificar usando instanceof se nosso objeto pertence à classe ParentClass e à classe ChildClass:

index.php<?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<?php
  $obj = new ParentClass; // objeto da classe pai
  
  var_dump($obj instanceof ParentClass); // exibirá true
  var_dump($obj instanceof ChildClass);  // exibirá false
?>
Задание 1

Crie uma classe User com as propriedades públicas name e surname.

Задание 2

Crie uma classe Employee que herde da classe User e adicione a propriedade salary.

Задание 3

Crie uma classe City com as propriedades públicas name e population.

Задание 4

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.

Задание 5

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.

Задание 6

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.

Задание 7

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.