Operator instanceof i nasleđivanje u OOP-u u PHP-u
Hajde da razmotrimo karakteristike nasleđivanja kada koristimo
operator instanceof. Pretpostavimo da imamo roditeljsku klasu
i izvedenu klasu (detetu):
<?php
// Roditeljska klasa:
class ParentClass
{
}
// Izvedena klasa (klasa dete):
class ChildClass extends ParentClass
{
}
?>
Napravimo objekat izvedene klase:
<?php
$obj = new ChildClass;
?>
Sada proverimo pomoću instanceof,
da li naš objekat pripada klasi ParentClass
i klasi ChildClass:
<?php
var_dump($obj instanceof ChildClass); // ispisaće true
var_dump($obj instanceof ParentClass); // takođe ispisaće true
?>
Kao što vidite iz primera - operator instanceof
ne pravi razliku prilikom provere između roditeljskih
i izvedenih klasa.
Nemojte se zbuniti - ako je objekat zaista
roditeljske klase onda će, naravno, provera
pripadnosti izvedenoj klasi vratiti
false:
<?php
$obj = new ParentClass; // objekat roditeljske klase
var_dump($obj instanceof ParentClass); // ispisaće true
var_dump($obj instanceof ChildClass); // ispisaće false
?>
Napravite klasu User sa javnim svojstvima
name i surname.
Napravite klasu Employee, koja će
nasleđivati od klase User i dodavati
svojstvo salary.
Napravite klasu City sa javnim svojstvima
name i population.
Kreirajte 3 objekta klase User,
3 objekta klase Employee,
3 objekta klase City, i u
proizvoljnom redosledu zapišite ih u niz
$arr.
Prođite kroz niz $arr petljom i ispišite
na ekran kolonu svojstava name onih
objekata koji pripadaju klasi User
ili potomku te klase.
Prođite kroz niz $arr petljom i ispišite
na ekran kolonu svojstava name onih
objekata koji ne pripadaju klasi User
ili potomku te klase.
Prođite kroz niz $arr petljom i ispišite
na ekran kolonu svojstava name onih
objekata koji pripadaju tačno klasi
User, odnosno ne klasi City
i ne klasi Employee.