Operátor instanceof a dědičnost v OOP v PHP

Pojďme si rozebrat zvláštnosti dědičnosti při použití operátoru instanceof. Předpokládejme, že máme rodičovskou třídu a potomka:

index.php<?php
  // Rodičovská třída:
  class ParentClass
  {
    
  }
  
  // Třída potomka:
  class ChildClass extends ParentClass
  {
    
  }
?>

Vytvořme objekt třídy potomka:

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

Nyní zkontrolujme pomocí instanceof, zda náš objekt patří třídě ParentClass a třídě ChildClass:

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

Jak vidíte z příkladu - operátor instanceof nerozlišuje při kontrole mezi rodičovskými a potomkovskými třídami.

Nenechte se zmást - pokud bude objekt skutečně z rodičovské třídy, pak samozřejmě kontrola příslušnosti k potomkovské třídě vrátí false:

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

Vytvořte třídu User s veřejnými vlastnostmi name a surname.

Задание 2

Vytvořte třídu Employee, která bude dědit od třídy User a přidá vlastnost salary.

Задание 3

Vytvořte třídu City s veřejnými vlastnostmi name a population.

Задание 4

Vytvořte 3 objekty třídy User, 3 objekty třídy Employee, 3 objekty třídy City a v libovolném pořadí je zapište do pole $arr.

Задание 5

Projděte cyklem pole $arr a vypište na obrazovku sloupec vlastností name těch objektů, které patří třídě User nebo potomkovi této třídy.

Задание 6

Projděte cyklem pole $arr a vypište na obrazovku sloupec vlastností name těch objektů, které nepatří třídě User nebo potomkovi této třídy.

Задание 7

Projděte cyklem pole $arr a vypište na obrazovku sloupec vlastností name těch objektů, které patří právě třídě User, tedy ne třídě City a ne třídě Employee.