Operatoren instanceof og arv i OOP i PHP
Lad os se på egenskaberne ved arv, når vi bruger
operatoren instanceof. Antag, at vi har en forældreklasse
og en underklasse:
<?php
// Forældreklassen:
class ParentClass
{
}
// Underklassen:
class ChildClass extends ParentClass
{
}
?>
Lad os oprette et objekt af underklassen:
<?php
$obj = new ChildClass;
?>
Lad os nu med instanceof kontrollere,
om vores objekt tilhører klassen ParentClass
og klassen ChildClass:
<?php
var_dump($obj instanceof ChildClass); // vil udskrive true
var_dump($obj instanceof ParentClass); // vil også udskrive true
?>
Som du kan se af eksemplet - operatoren instanceof
skelner ikke ved kontrol mellem forældreklasser
og underklasser.
Vær ikke forvirret - hvis objektet virkelig er
af forældreklassen, så vil kontrollen
for tilhørsforhold til underklassen selvfølgelig returnere
false:
<?php
$obj = new ParentClass; // objekt af forældreklassen
var_dump($obj instanceof ParentClass); // vil udskrive true
var_dump($obj instanceof ChildClass); // vil udskrive false
?>
Opret klassen User med de offentlige egenskaber
name og surname.
Opret klassen Employee, som vil
arve fra klassen User og tilføje
egenskaben salary.
Opret klassen City med de offentlige egenskaber
name og population.
Opret 3 objekter af klassen User,
3 objekter af klassen Employee,
3 objekter af klassen City, og
skriv dem i vilkårlig rækkefølge i arrayet
$arr.
Gennemgå arrayet $arr med en løkke og udskriv
på skærmen en kolonne med egenskaben name for
de objekter, der tilhører klassen User
eller en underklasse af denne klasse.
Gennemgå arrayet $arr med en løkke og udskriv
på skærmen en kolonne med egenskaben name for
de objekter, der *ikke* tilhører klassen User
eller en underklasse af denne klasse.
Gennemgå arrayet $arr med en løkke og udskriv
på skærmen en kolonne med egenskaben name for
de objekter, der tilhører netop klassen
User, det vil sige ikke klassen City
og ikke klassen Employee.