Operátor instanceof a dedičstvo v OOP v PHP

Poďme si rozobrať vlastnosti dedičstva pri použití operátora instanceof. Predpokladajme, že máme rodičovskú triedu a dcérsku triedu:

index.php<?php
  // Rodičovská trieda:
  class ParentClass
  {
    
  }
  
  // Dcérska trieda:
  class ChildClass extends ParentClass
  {
    
  }
?>

Vytvorme objekt dcérskej triedy:

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

Skontrolujme teraz pomocou instanceof, či patrí náš objekt do triedy ParentClass a do triedy ChildClass:

index.php<?php
  var_dump($obj instanceof ChildClass);  // vypíše true
  var_dump($obj instanceof ParentClass); // tiež vypíše true
?>

Ako vidíte z príkladu - operátor instanceof nerobí rozdiel pri kontrole medzi rodičovskými a dcérskymi triedami.

Nezamotajte sa - ak bude objekt naozaj rodičovskej triedy, tak samozrejme kontrola príslušnosti k dcérskej triede vráti false:

php<?php
  $obj = new ParentClass; // objekt rodičovskej triedy
  
  var_dump($obj instanceof ParentClass); // vypíše true
  var_dump($obj instanceof ChildClass);  // vypíše false
?>
Задание 1

Vytvorte triedu User s verejnými vlastnosťami name a surname.

Задание 2

Vytvorte triedu Employee, ktorá bude dediť od triedy User a pridáva vlastnosť salary.

Задание 3

Vytvorte triedu City s verejnými vlastnosťami name a population.

Задание 4

Vytvorte 3 objekty triedy User, 3 objekty triedy Employee, 3 objekty triedy City a v ľubovoľnom poradí ich zapíšte do poľa $arr.

Задание 5

Prechádzajte cyklom pole $arr a vypíšte na obrazovku stĺpec vlastností name tých objektov, ktoré patria do triedy User alebo sú potomkom tejto triedy.

Задание 6

Prechádzajte cyklom pole $arr a vypíšte na obrazovku stĺpec vlastností name tých objektov, ktoré nepatria do triedy User alebo potomkovi tejto triedy.

Задание 7

Prechádzajte cyklom pole $arr a vypíšte na obrazovku stĺpec vlastností name tých objektov, ktoré patria presne do triedy User, teda nie do triedy City a nie do triedy Employee.