Аператар 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.