Operatorul instanceof și moștenirea în OOP în PHP
Să analizăm particularitățile moștenirii atunci când utilizăm
operatorul instanceof. Să presupunem că avem o clasă părinte
și o clasă copil:
<?php
// Clasa părinte:
class ParentClass
{
}
// Clasa copil:
class ChildClass extends ParentClass
{
}
?>
Să creăm un obiect al clasei copil:
<?php
$obj = new ChildClass;
?>
Să verificăm acum cu ajutorul instanceof,
dacă obiectul nostru aparține clasei ParentClass
și clasei ChildClass:
<?php
var_dump($obj instanceof ChildClass); // va afișa true
var_dump($obj instanceof ParentClass); // va afișa de asemenea true
?>
După cum vedeți din exemplu - operatorul instanceof
nu face distincție la verificare între clasele părinte
și clasele copil.
Nu vă încurcați - dacă obiectul va fi într-adevăr
al clasei părinte atunci, desigur, verificarea
aparținerii la clasa copil va returna
false:
<?php
$obj = new ParentClass; // obiect al clasei părinte
var_dump($obj instanceof ParentClass); // va afișa true
var_dump($obj instanceof ChildClass); // va afișa false
?>
Creați o clasă User cu proprietăți publice
name și surname.
Creați o clasă Employee, care va
moșteni din clasa User și va adăuga
proprietatea salary.
Creați o clasă City cu proprietăți publice
name și population.
Creați 3 obiecte ale clasei User,
3 obiecte ale clasei Employee,
3 obiecte ale clasei City, și în
ordine arbitrară scrieți-le în array-ul
$arr.
Parcurgeți cu bucla array-ul $arr și afișați
pe ecran coloana proprietăților name ale
acelor obiecte care aparțin clasei User
sau descendenților acestei clase.
Parcurgeți cu bucla array-ul $arr și afișați
pe ecran coloana proprietăților name ale
acelor obiecte care nu aparțin clasei User
sau descendenților acestei clase.
Parcurgeți cu bucla array-ul $arr și afișați
pe ecran coloana proprietăților name ale
acelor obiecte care aparțin exact clasei
User, adică nu clasei City
și nu clasei Employee.