Az instanceof operátor és az öröklődés az OOP-ban PHP-ben
Nézzük meg az öröklődés sajátosságait az
instanceof operátor használatakor.
Tegyük fel, hogy van egy szülő osztályunk
és egy gyermek osztályunk:
<?php
// Szülő osztály:
class ParentClass
{
}
// Gyermek osztály:
class ChildClass extends ParentClass
{
}
?>
Hozzunk létre egy objektumot a gyermek osztályból:
<?php
$obj = new ChildClass;
?>
Ellenőrizzük most a instanceof segítségével,
hogy az objektumunk a ParentClass osztályhoz
és a ChildClass osztályhoz tartozik-e:
<?php
var_dump($obj instanceof ChildClass); // true-t ad vissza
var_dump($obj instanceof ParentClass); // szintén true-t ad vissza
?>
Amint a példából látható - az instanceof operátor
nem tesz különbséget a szülő és a gyermek osztályok
között az ellenőrzés során.
Ne keveredjünk össze - ha az objektum valóban
a szülő osztályból származik, akkor természetesen
a gyermek osztályhoz való tartozás ellenőrzése
false értéket ad vissza:
<?php
$obj = new ParentClass; // a szülő osztály objektuma
var_dump($obj instanceof ParentClass); // true-t ad vissza
var_dump($obj instanceof ChildClass); // false-t ad vissza
?>
Készítsen egy User osztályt publikus tulajdonságokkal:
name és surname.
Készítsen egy Employee osztályt, amely
örököl a User osztályból és hozzáad egy
salary tulajdonságot.
Készítsen egy City osztályt publikus tulajdonságokkal:
name és population.
Hozzon létre 3 objektumot a User osztályból,
3 objektumot a Employee osztályból,
3 objektumot a City osztályból, és
tetszőleges sorrendben írja be őket a $arr
tömbbe.
Iteráljon végig a $arr tömbön ciklussal és jelenítse
meg a képernyőn a name tulajdonságok oszlopát azoknak
az objektumoknak, amelyek a User osztályhoz vagy annak
leszármazottjához tartoznak.
Iteráljon végig a $arr tömbön ciklussal és jelenítse
meg a képernyőn a name tulajdonságok oszlopát azoknak
az objektumoknak, amelyek nem tartoznak a User osztályhoz
vagy annak leszármazottjához.
Iteráljon végig a $arr tömbön ciklussal és jelenítse
meg a képernyőn a name tulajdonságok oszlopát azoknak
az objektumoknak, amelyek pontosan a User osztályhoz
tartoznak, vagyis nem a City osztályhoz és nem is
a Employee osztályhoz.