Operatore instanceof ed ereditarietà in OOP in PHP
Analizziamo le caratteristiche dell'ereditarietà quando si utilizza
l'operatore instanceof. Supponiamo di avere una classe genitore
e una classe figlia:
<?php
// Classe genitore:
class ParentClass
{
}
// Classe figlia:
class ChildClass extends ParentClass
{
}
?>
Creiamo un oggetto della classe figlia:
<?php
$obj = new ChildClass;
?>
Controlliamo ora con instanceof
se il nostro oggetto appartiene alla classe ParentClass
e alla classe ChildClass:
<?php
var_dump($obj instanceof ChildClass); // restituirà true
var_dump($obj instanceof ParentClass); // restituirà anche true
?>
Come puoi vedere dall'esempio - l'operatore instanceof
non distingue tra classi genitore e classi figlie durante il controllo.
Non confonderti - se l'oggetto è effettivamente
della classe genitore, allora ovviamente il controllo
dell'appartenenza alla classe figlia restituirà
false:
<?php
$obj = new ParentClass; // oggetto della classe genitore
var_dump($obj instanceof ParentClass); // restituirà true
var_dump($obj instanceof ChildClass); // restituirà false
?>
Crea una classe User con le proprietà pubbliche
name e surname.
Crea una classe Employee che
erediti dalla classe User e aggiunga
la proprietà salary.
Crea una classe City con le proprietà pubbliche
name e population.
Crea 3 oggetti della classe User,
3 oggetti della classe Employee,
3 oggetti della classe City e, in
ordine casuale, inseriscili nell'array
$arr.
Scorri l'array $arr con un ciclo e visualizza
a schermo la colonna delle proprietà name degli
oggetti che appartengono alla classe User
o a una classe discendente di questa.
Scorri l'array $arr con un ciclo e visualizza
a schermo la colonna delle proprietà name degli
oggetti che *non* appartengono alla classe User
o a una classe discendente di questa.
Scorri l'array $arr con un ciclo e visualizza
a schermo la colonna delle proprietà name degli
oggetti che appartengono *esattamente* alla classe
User, cioè non alla classe City
e non alla classe Employee.