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