Operator instanceof i dziedziczenie w OOP w PHP

Przeanalizujmy szczegóły dziedziczenia przy użyciu operatora instanceof. Załóżmy, że mamy klasę rodzicielską i klasę potomną:

index.php<?php
  // Klasa rodzicielska:
  class ParentClass
  {
    
  }
  
  // Klasa potomna:
  class ChildClass extends ParentClass
  {
    
  }
?>

Stwórzmy obiekt klasy potomnej:

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

Sprawdźmy teraz za pomocą instanceof, czy nasz obiekt należy do klasy ParentClass i do klasy ChildClass:

index.php<?php
  var_dump($obj instanceof ChildClass);  // wypisze true
  var_dump($obj instanceof ParentClass); // też wypisze true
?>

Jak widać na przykładzie - operator instanceof nie rozróżnia przy sprawdzaniu między klasami rodzicielskimi i potomnymi.

Nie pomyl się - jeśli obiekt będzie rzeczywiście klasy rodzicielskiej to, oczywiście, sprawdzenie przynależności do klasy potomnej zwróci false:

php<?php
  $obj = new ParentClass; // obiekt klasy rodzicielskiej
  
  var_dump($obj instanceof ParentClass); // wypisze true
  var_dump($obj instanceof ChildClass);  // wypisze false
?>
Задание 1

Stwórz klasę User z publicznymi właściwościami name i surname.

Задание 2

Stwórz klasę Employee, która będzie dziedziczyć z klasy User i dodawać właściwość salary.

Задание 3

Stwórz klasę City z publicznymi właściwościami name i population.

Задание 4

Utwórz 3 obiekty klasy User, 3 obiekty klasy Employee, 3 obiekty klasy City, i w dowolnej kolejności zapisz je w tablicy $arr.

Задание 5

Przejdź pętlą przez tablicę $arr i wypisz na ekran kolumnę właściwości name tych obiektów, które należą do klasy User lub potomka tej klasy.

Задание 6

Przejdź pętlą przez tablicę $arr i wypisz na ekran kolumnę właściwości name tych obiektów, które nie należą do klasy User lub potomka tej klasy.

Задание 7

Przejdź pętlą przez tablicę $arr i wypisz na ekran kolumnę właściwości name tych obiektów, które należą dokładnie do klasy User, to znaczy nie do klasy City i nie do klasy Employee.