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:

index.php<?php
  // Förälderklass:
  class ParentClass
  {
    
  }
  
  // Barnklass:
  class ChildClass extends ParentClass
  {
    
  }
?>

Låt oss skapa ett objekt av barnklassen:

index.php<?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:

index.php<?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<?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
?>
Задание 1

Skapa klassen User med de publika egenskaperna name och surname.

Задание 2

Skapa klassen Employee, som ska ärva från klassen User och lägga till egenskapen salary.

Задание 3

Skapa klassen City med de publika egenskaperna name och population.

Задание 4

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.

Задание 5

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.

Задание 6

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.

Задание 7

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.