Аператар 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
.