Operatoren instanceof og arv i OOP i PHP

La oss se på egenskapene ved arv når vi bruker operatoren instanceof. La oss si at vi har en foreldreklasse og en barneklasse:

index.php<?php
  // Foreldreklassen:
  class ParentClass
  {
    
  }
  
  // Barneklassen:
  class ChildClass extends ParentClass
  {
    
  }
?>

La oss opprette et objekt av barneklassen:

index.php<?php
  $obj = new ChildClass;
?>

La oss nå sjekke med instanceof om objektet vårt tilhører klassen ParentClass og klassen ChildClass:

index.php<?php
  var_dump($obj instanceof ChildClass);  // vil vise true
  var_dump($obj instanceof ParentClass); // vil også vise true
?>

Som du ser fra eksemplet - operatoren instanceof gjør ikke forskjell på foreldreklasser og barneklasser under sjekken.

Ikke bli forvirret - hvis objektet faktisk er av foreldreklassen, vil selvsagt sjekken for tilhørighet til barneklassen returnere false:

php<?php
  $obj = new ParentClass; // objekt av foreldreklassen
  
  var_dump($obj instanceof ParentClass); // vil vise true
  var_dump($obj instanceof ChildClass);  // vil vise false
?>
Задание 1

Lag en klasse User med offentlige egenskaper name og surname.

Задание 2

Lag en klasse Employee som arver fra klassen User og legger til egenskapen salary.

Задание 3

Lag en klasse City med offentlige egenskaper name og population.

Задание 4

Opprett 3 objekter av klassen User, 3 objekter av klassen Employee, 3 objekter av klassen City, og skriv dem i tilfeldig rekkefølge inn i arrayet $arr.

Задание 5

Gjennomgå arrayet $arr med en løkke og skriv ut en kolonne med egenskapene name for de objektene som tilhører klassen User eller en underklasse av denne klassen.

Задание 6

Gjennomgå arrayet $arr med en løkke og skriv ut en kolonne med egenskapene name for de objektene som ikke tilhører klassen User eller en underklasse av denne klassen.

Задание 7

Gjennomgå arrayet $arr med en løkke og skriv ut en kolonne med egenskapene name for de objektene som tilhører nøyaktig klassen User, det vil si ikke klassen City og ikke klassen Employee.