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:
<?php
// Rodičovská třída:
class ParentClass
{
}
// Třída potomka:
class ChildClass extends ParentClass
{
}
?>
Vytvořme objekt třídy potomka:
<?php
$obj = new ChildClass;
?>
Nyní zkontrolujme pomocí instanceof,
zda náš objekt patří třídě ParentClass
a třídě ChildClass:
<?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
$obj = new ParentClass; // objekt rodičovské třídy
var_dump($obj instanceof ParentClass); // vypíše true
var_dump($obj instanceof ChildClass); // vypíše false
?>
Vytvořte třídu User s veřejnými vlastnostmi
name a surname.
Vytvořte třídu Employee, která bude
dědit od třídy User a přidá
vlastnost salary.
Vytvořte třídu City s veřejnými vlastnostmi
name a population.
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.
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.
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.
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.