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:
<?php
// Rodičovská trieda:
class ParentClass
{
}
// Dcérska trieda:
class ChildClass extends ParentClass
{
}
?>
Vytvorme objekt dcérskej triedy:
<?php
$obj = new ChildClass;
?>
Skontrolujme teraz pomocou instanceof,
či patrí náš objekt do triedy ParentClass
a do triedy ChildClass:
<?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
$obj = new ParentClass; // objekt rodičovskej triedy
var_dump($obj instanceof ParentClass); // vypíše true
var_dump($obj instanceof ChildClass); // vypíše false
?>
Vytvorte triedu User s verejnými vlastnosťami
name a surname.
Vytvorte triedu Employee, ktorá bude
dediť od triedy User a pridáva
vlastnosť salary.
Vytvorte triedu City s verejnými vlastnosťami
name a population.
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.
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.
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.
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.