Operaator instanceof ja pärimine OOP-s PHP-s

Vaatleme pärimise eripärasid operaatori instanceof kasutamisel. Olgu meil vanemklass ja lapsklass:

index.php<?php
  // Vanemklass:
  class ParentClass
  {
    
  }
  
  // Lapsklass:
  class ChildClass extends ParentClass
  {
    
  }
?>

Loome lapsklassi objekti:

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

Kontrollime nüüd instanceof abil, kas meie objekt kuulub klassi ParentClass ja klassi ChildClass:

index.php<?php
  var_dump($obj instanceof ChildClass);  // väljastab true
  var_dump($obj instanceof ParentClass); // samuti väljastab true
?>

Nagu näitest näete - operaator instanceof ei tee vahet vanem- ja lapsklasside kontrollimisel.

Ärge segadusse sattuge - kui objekt on tegelikult vanemklassi, siis loomulikult tagastab kontroll lapsklassi kuulumise kohta false:

php<?php
  $obj = new ParentClass; // vanemklassi objekt
  
  var_dump($obj instanceof ParentClass); // väljastab true
  var_dump($obj instanceof ChildClass);  // väljastab false
?>
Задание 1

Tehke klass User avalike omadustega name ja surname.

Задание 2

Tehke klass Employee, mis pärib klassist User ja lisab omaduse salary.

Задание 3

Tehke klass City avalike omadustega name ja population.

Задание 4

Looge 3 objekti klassi User, 3 objekti klassi Employee, 3 objekti klassi City, ja pane need suvalises järjekorras massiivi $arr.

Задание 5

Käige tsükliga läbi massiivi $arr ja kuvage ekraanile veerg omadustega name nendest objektidest, mis kuuluvad klassi User või selle klassi järglastesse.

Задание 6

Käige tsükliga läbi massiivi $arr ja kuvage ekraanile veerg omadustega name nendest objektidest, mis ei kuulu klassi User ega selle klassi järglastesse.

Задание 7

Käige tsükliga läbi massiivi $arr ja kuvage ekraanile veerg omadustega name nendest objektidest, mis kuuluvad täpselt klassi User, st mitte klassi City ega klassi Employee.