Operatorn instanceof och arv i OOP i PHP
Låt oss undersöka detaljerna kring arv när vi använder
operatorn instanceof. Låt oss säga att vi har en förälderklass
och en barnklass:
<?php
// Förälderklass:
class ParentClass
{
}
// Barnklass:
class ChildClass extends ParentClass
{
}
?>
Låt oss skapa ett objekt av barnklassen:
<?php
$obj = new ChildClass;
?>
Låt oss nu med hjälp av instanceof kontrollera
om vårt objekt tillhör klassen ParentClass
och klassen ChildClass:
<?php
var_dump($obj instanceof ChildClass); // kommer att skriva ut true
var_dump($obj instanceof ParentClass); // kommer också att skriva ut true
?>
Som du kan se från exemplet gör operatorn instanceof
ingen skillnad vid kontroll mellan förälder-
och barnklasser.
Bli inte förvirrad - om objektet verkligen är
av förälderklassen så kommer kontrollen
av tillhörighet till barnklassen naturligtvis att returnera
false:
<?php
$obj = new ParentClass; // objekt av förälderklassen
var_dump($obj instanceof ParentClass); // kommer att skriva ut true
var_dump($obj instanceof ChildClass); // kommer att skriva ut false
?>
Skapa klassen User med de publika egenskaperna
name och surname.
Skapa klassen Employee, som ska
ärva från klassen User och lägga till
egenskapen salary.
Skapa klassen City med de publika egenskaperna
name och population.
Skapa 3 objekt av klassen User,
3 objekt av klassen Employee,
3 objekt av klassen City, och
skriv in dem i en array
$arr i godtycklig ordning.
Gå igenom arrayen $arr med en loop och skriv
ut en kolumn med egenskaperna name för
de objekt som tillhör klassen User
eller en avkomling till denna klass.
Gå igenom arrayen $arr med en loop och skriv
ut en kolumn med egenskaperna name för
de objekt som *inte* tillhör klassen User
eller en avkomling till denna klass.
Gå igenom arrayen $arr med en loop och skriv
ut en kolumn med egenskaperna name för
de objekt som tillhör *exakt* klassen
User, alltså varken klassen City
eller klassen Employee.