De instanceof operator en overerving in OOP in PHP
Laten we de kenmerken van overerving bekijken bij het gebruik van
de operator instanceof. Stel dat we een bovenliggende klasse
en een onderliggende klasse hebben:
<?php
// Bovenliggende klasse:
class ParentClass
{
}
// Onderliggende klasse:
class ChildClass extends ParentClass
{
}
?>
Laten we een object van de onderliggende klasse maken:
<?php
$obj = new ChildClass;
?>
Laten we nu met instanceof controleren
of ons object tot de klasse ParentClass
en de klasse ChildClass behoort:
<?php
var_dump($obj instanceof ChildClass); // geeft true weer
var_dump($obj instanceof ParentClass); // geeft ook true weer
?>
Zoals je uit het voorbeeld kunt zien - de operator instanceof
maakt geen onderscheid bij het controleren tussen bovenliggende
en onderliggende klassen.
Wees niet in de war - als het object daadwerkelijk
van de bovenliggende klasse is, dan zal de controle
op behoren tot de onderliggende klasse uiteraard
false teruggeven:
<?php
$obj = new ParentClass; // object van de bovenliggende klasse
var_dump($obj instanceof ParentClass); // geeft true weer
var_dump($obj instanceof ChildClass); // geeft false weer
?>
Maak een klasse User met publieke eigenschappen
name en surname.
Maak een klasse Employee, die
erft over van de klasse User en voegt
eigenschap salary toe.
Maak een klasse City met publieke eigenschappen
name en population.
Maak 3 objecten van de klasse User,
3 objecten van de klasse Employee,
3 objecten van de klasse City, en
schrijf ze in willekeurige volgorde in de array
$arr.
Doorloop de array $arr met een lus en geef
op het scherm een kolom met de eigenschappen name weer
van die objecten die behoren tot de klasse User
of een afstammeling van deze klasse.
Doorloop de array $arr met een lus en geef
op het scherm een kolom met de eigenschappen name weer
van die objecten die niet behoren tot de klasse User
of een afstammeling van deze klasse.
Doorloop de array $arr met een lus en geef
op het scherm een kolom met de eigenschappen name weer
van die objecten die behoren tot precies de klasse
User, dus niet de klasse City
en niet de klasse Employee.