Operatorul instanceof și moștenirea în OOP în PHP

Să analizăm particularitățile moștenirii atunci când utilizăm operatorul instanceof. Să presupunem că avem o clasă părinte și o clasă copil:

index.php<?php
  // Clasa părinte:
  class ParentClass
  {
    
  }
  
  // Clasa copil:
  class ChildClass extends ParentClass
  {
    
  }
?>

Să creăm un obiect al clasei copil:

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

Să verificăm acum cu ajutorul instanceof, dacă obiectul nostru aparține clasei ParentClass și clasei ChildClass:

index.php<?php
  var_dump($obj instanceof ChildClass);  // va afișa true
  var_dump($obj instanceof ParentClass); // va afișa de asemenea true
?>

După cum vedeți din exemplu - operatorul instanceof nu face distincție la verificare între clasele părinte și clasele copil.

Nu vă încurcați - dacă obiectul va fi într-adevăr al clasei părinte atunci, desigur, verificarea aparținerii la clasa copil va returna false:

php<?php
  $obj = new ParentClass; // obiect al clasei părinte
  
  var_dump($obj instanceof ParentClass); // va afișa true
  var_dump($obj instanceof ChildClass);  // va afișa false
?>
Задание 1

Creați o clasă User cu proprietăți publice name și surname.

Задание 2

Creați o clasă Employee, care va moșteni din clasa User și va adăuga proprietatea salary.

Задание 3

Creați o clasă City cu proprietăți publice name și population.

Задание 4

Creați 3 obiecte ale clasei User, 3 obiecte ale clasei Employee, 3 obiecte ale clasei City, și în ordine arbitrară scrieți-le în array-ul $arr.

Задание 5

Parcurgeți cu bucla array-ul $arr și afișați pe ecran coloana proprietăților name ale acelor obiecte care aparțin clasei User sau descendenților acestei clase.

Задание 6

Parcurgeți cu bucla array-ul $arr și afișați pe ecran coloana proprietăților name ale acelor obiecte care nu aparțin clasei User sau descendenților acestei clase.

Задание 7

Parcurgeți cu bucla array-ul $arr și afișați pe ecran coloana proprietăților name ale acelor obiecte care aparțin exact clasei User, adică nu clasei City și nu clasei Employee.