Оператор instanceof и наследование в ООП в PHP

Давайте разберем особенности наследования при использовании оператора instanceof. Пусть у нас есть родительский класс и дочерний:

index.php<?php
  // Родительский класс:
  class ParentClass
  {
    
  }
  
  // Дочерний класс:
  class ChildClass extends ParentClass
  {
    
  }
?>

Создадим объект дочернего класса:

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

Проверим теперь с помощью instanceof, принадлежит ли наш объект классу ParentClass и классу ChildClass:

index.php<?php
  var_dump($obj instanceof ChildClass);  // выведет true
  var_dump($obj instanceof ParentClass); // тоже выведет true
?>

Как вы видите из примера - оператор instanceof не делает различия при проверке между родительскими и дочерними классами.

Не путайтесь - если объект будет действительно родительского класса то, конечно же, проверка на принадлежность к дочернему классу вернет false:

php<?php
  $obj = new ParentClass; // объект родительского класса
  
  var_dump($obj instanceof ParentClass); // выведет true
  var_dump($obj instanceof ChildClass);  // выведет false
?>
Задание 1

Сделайте класс User с публичным свойствами name и surname.

Задание 2

Сделайте класс Employee, который будет наследовать от класса User и добавлять свойство salary.

Задание 3

Сделайте класс City с публичными свойствами name и population.

Задание 4

Создайте 3 объекта класса User, 3 объекта класса Employee, 3 объекта класса City, и в произвольном порядке запишите их в массив $arr.

Задание 5

Переберите циклом массив $arr и выведите на экран столбец свойств name тех объектов, которые принадлежат классу User или потомку этого класса.

Задание 6

Переберите циклом массив $arr и выведите на экран столбец свойств name тех объектов, которые не принадлежат классу User или потомку этого класса.

Задание 7

Переберите циклом массив $arr и выведите на экран столбец свойств name тех объектов, которые принадлежат именно классу User, то есть не классу City и не классу Employee.