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