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