Der instanceof-Operator und Vererbung in OOP in PHP
Lassen Sie uns die Besonderheiten der Vererbung bei der Verwendung
des Operators instanceof untersuchen. Nehmen wir an, wir haben eine Elternklasse
und eine Kindklasse:
<?php
// Elternklasse:
class ParentClass
{
}
// Kindklasse:
class ChildClass extends ParentClass
{
}
?>
Erstellen wir ein Objekt der Kindklasse:
<?php
$obj = new ChildClass;
?>
Prüfen wir nun mit Hilfe von instanceof,
ob unser Objekt zur Klasse ParentClass
und zur Klasse ChildClass gehört:
<?php
var_dump($obj instanceof ChildClass); // gibt true aus
var_dump($obj instanceof ParentClass); // gibt auch true aus
?>
Wie Sie an dem Beispiel sehen - macht der Operator instanceof
beim Prüfen keinen Unterschied zwischen Eltern-
und Kindklassen.
Verwechseln Sie es nicht - wenn das Objekt tatsächlich
von der Elternklasse ist, dann wird die Prüfung
auf Zugehörigkeit zur Kindklasse natürlich
false zurückgeben:
<?php
$obj = new ParentClass; // Objekt der Elternklasse
var_dump($obj instanceof ParentClass); // gibt true aus
var_dump($obj instanceof ChildClass); // gibt false aus
?>
Erstellen Sie eine Klasse User mit öffentlichen Eigenschaften
name und surname.
Erstellen Sie eine Klasse Employee, die
von der Klasse User erbt und eine
Eigenschaft salary hinzufügt.
Erstellen Sie eine Klasse City mit öffentlichen Eigenschaften
name und population.
Erstellen Sie 3 Objekte der Klasse User,
3 Objekte der Klasse Employee,
3 Objekte der Klasse City und schreiben Sie diese
in beliebiger Reihenfolge in ein Array
$arr.
Durchlaufen Sie das Array $arr mit einer Schleife und geben Sie
auf dem Bildschirm die Spalte der Eigenschaften name derjenigen
Objekte aus, die zur Klasse User
oder einem Nachkommen dieser Klasse gehören.
Durchlaufen Sie das Array $arr mit einer Schleife und geben Sie
auf dem Bildschirm die Spalte der Eigenschaften name derjenigen
Objekte aus, die nicht zur Klasse User
oder einem Nachkommen dieser Klasse gehören.
Durchlaufen Sie das Array $arr mit einer Schleife und geben Sie
auf dem Bildschirm die Spalte der Eigenschaften name derjenigen
Objekte aus, die genau zur Klasse
User gehören, also nicht zur Klasse City
und nicht zur Klasse Employee.