Operator instanceof i dziedziczenie w OOP w PHP
Przeanalizujmy szczegóły dziedziczenia przy użyciu
operatora instanceof. Załóżmy, że mamy klasę
rodzicielską i klasę potomną:
<?php
// Klasa rodzicielska:
class ParentClass
{
}
// Klasa potomna:
class ChildClass extends ParentClass
{
}
?>
Stwórzmy obiekt klasy potomnej:
<?php
$obj = new ChildClass;
?>
Sprawdźmy teraz za pomocą instanceof,
czy nasz obiekt należy do klasy ParentClass
i do klasy ChildClass:
<?php
var_dump($obj instanceof ChildClass); // wypisze true
var_dump($obj instanceof ParentClass); // też wypisze true
?>
Jak widać na przykładzie - operator instanceof
nie rozróżnia przy sprawdzaniu między klasami
rodzicielskimi i potomnymi.
Nie pomyl się - jeśli obiekt będzie rzeczywiście
klasy rodzicielskiej to, oczywiście, sprawdzenie
przynależności do klasy potomnej zwróci
false:
<?php
$obj = new ParentClass; // obiekt klasy rodzicielskiej
var_dump($obj instanceof ParentClass); // wypisze true
var_dump($obj instanceof ChildClass); // wypisze false
?>
Stwórz klasę User z publicznymi właściwościami
name i surname.
Stwórz klasę Employee, która będzie
dziedziczyć z klasy User i dodawać
właściwość salary.
Stwórz klasę City z publicznymi właściwościami
name i population.
Utwórz 3 obiekty klasy User,
3 obiekty klasy Employee,
3 obiekty klasy City, i w
dowolnej kolejności zapisz je w tablicy
$arr.
Przejdź pętlą przez tablicę $arr i wypisz
na ekran kolumnę właściwości name tych
obiektów, które należą do klasy User
lub potomka tej klasy.
Przejdź pętlą przez tablicę $arr i wypisz
na ekran kolumnę właściwości name tych
obiektów, które nie należą do klasy User
lub potomka tej klasy.
Przejdź pętlą przez tablicę $arr i wypisz
na ekran kolumnę właściwości name tych
obiektów, które należą dokładnie do klasy
User, to znaczy nie do klasy City
i nie do klasy Employee.