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