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