Operator instanceof i nasleđivanje u OOP-u u PHP-u

Hajde da razmotrimo karakteristike nasleđivanja kada koristimo operator instanceof. Pretpostavimo da imamo roditeljsku klasu i izvedenu klasu (detetu):

index.php<?php
  // Roditeljska klasa:
  class ParentClass
  {
    
  }
  
  // Izvedena klasa (klasa dete):
  class ChildClass extends ParentClass
  {
    
  }
?>

Napravimo objekat izvedene klase:

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

Sada proverimo pomoću instanceof, da li naš objekat pripada klasi ParentClass i klasi ChildClass:

index.php<?php
  var_dump($obj instanceof ChildClass);  // ispisaće true
  var_dump($obj instanceof ParentClass); // takođe ispisaće true
?>

Kao što vidite iz primera - operator instanceof ne pravi razliku prilikom provere između roditeljskih i izvedenih klasa.

Nemojte se zbuniti - ako je objekat zaista roditeljske klase onda će, naravno, provera pripadnosti izvedenoj klasi vratiti false:

php<?php
  $obj = new ParentClass; // objekat roditeljske klase
  
  var_dump($obj instanceof ParentClass); // ispisaće true
  var_dump($obj instanceof ChildClass);  // ispisaće false
?>
Задание 1

Napravite klasu User sa javnim svojstvima name i surname.

Задание 2

Napravite klasu Employee, koja će nasleđivati od klase User i dodavati svojstvo salary.

Задание 3

Napravite klasu City sa javnim svojstvima name i population.

Задание 4

Kreirajte 3 objekta klase User, 3 objekta klase Employee, 3 objekta klase City, i u proizvoljnom redosledu zapišite ih u niz $arr.

Задание 5

Prođite kroz niz $arr petljom i ispišite na ekran kolonu svojstava name onih objekata koji pripadaju klasi User ili potomku te klase.

Задание 6

Prođite kroz niz $arr petljom i ispišite na ekran kolonu svojstava name onih objekata koji ne pripadaju klasi User ili potomku te klase.

Задание 7

Prođite kroz niz $arr petljom i ispišite na ekran kolonu svojstava name onih objekata koji pripadaju tačno klasi User, odnosno ne klasi City i ne klasi Employee.