Операторот instanceof и наследување во ООП во PHP
Ајде да ги разгледаме карактеристиките на наследувањето при користење
на операторот instanceof. Да претпоставиме дека имаме родителска класа
и детска класа:
<?php
// Родителска класа:
class ParentClass
{
}
// Детска класа:
class ChildClass extends ParentClass
{
}
?>
Да креираме објект од детската класа:
<?php
$obj = new ChildClass;
?>
Сега да провериме со помош на instanceof,
дали нашиот објект припаѓа на класата ParentClass
и на класата ChildClass:
<?php
var_dump($obj instanceof ChildClass); // ќе испечати true
var_dump($obj instanceof ParentClass); // исто така ќе испечати true
?>
Како што можете да видите од примерот - операторот instanceof
не прави разлика при проверката помеѓу родителските
и детските класи.
Не заблудувајте се - ако објектот навистина е
од родителската класа, тогаш, се разбира, проверката
за припадност кон детската класа ќе врати
false:
<?php
$obj = new ParentClass; // објект од родителска класа
var_dump($obj instanceof ParentClass); // ќе испечати true
var_dump($obj instanceof ChildClass); // ќе испечати false
?>
Направете класа User со јавни својства
name и surname.
Направете класа Employee, која ќе
наследува од класата User и ќе додаде
својство salary.
Направете класа City со јавни својства
name и population.
Создадете 3 објекти од класата User,
3 објекти од класата Employee,
3 објекти од класата City, и по
случаен редослед запишете ги во низата
$arr.
Поминете ја со циклус низата $arr и испечатете
на екран колона од својствата name на оние
објекти кои припаѓаат на класата User
или на потомок на оваа класа.
Поминете ја со циклус низата $arr и испечатете
на екран колона од својствата name на оние
објекти кои не припаѓаат на класата User
или на потомок на оваа класа.
Поминете ја со циклус низата $arr и испечатете
на екран колона од својствата name на оние
објекти кои припаѓаат точно на класата
User, односно не на класата City
и не на класата Employee.