Opérateur instanceof et héritage en POO en PHP

Analysons les particularités de l'héritage lors de l'utilisation de l'opérateur instanceof. Supposons que nous ayons une classe parent et une classe enfant :

index.php<?php
  // Classe parent :
  class ParentClass
  {
    
  }
  
  // Classe enfant :
  class ChildClass extends ParentClass
  {
    
  }
?>

Créons un objet de la classe enfant :

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

Vérifions maintenant à l'aide de instanceof si notre objet appartient à la classe ParentClass et à la classe ChildClass :

index.php<?php
  var_dump($obj instanceof ChildClass);  // affichera true
  var_dump($obj instanceof ParentClass); // affichera également true
?>

Comme vous pouvez le voir dans l'exemple - l'opérateur instanceof ne fait pas de distinction lors de la vérification entre les classes parentes et les classes enfants.

Ne vous trompez pas - si l'objet est réellement de la classe parent, alors, bien sûr, la vérification d'appartenance à la classe enfant retournera false :

php<?php
  $obj = new ParentClass; // objet de la classe parent
  
  var_dump($obj instanceof ParentClass); // affichera true
  var_dump($obj instanceof ChildClass);  // affichera false
?>
Задание 1

Créez une classe User avec les propriétés publiques name et surname.

Задание 2

Créez une classe Employee qui héritera de la classe User et ajoutera une propriété salary.

Задание 3

Créez une classe City avec les propriétés publiques name et population.

Задание 4

Créez 3 objets de la classe User, 3 objets de la classe Employee, 3 objets de la classe City, et dans un ordre arbitraire, enregistrez-les dans un tableau $arr.

Задание 5

Parcourez en boucle le tableau $arr et affichez à l'écran la colonne des propriétés name des objets qui appartiennent à la classe User ou à une classe descendante de celle-ci.

Задание 6

Parcourez en boucle le tableau $arr et affichez à l'écran la colonne des propriétés name des objets qui n'appartiennent pas à la classe User ou à une classe descendante de celle-ci.

Задание 7

Parcourez en boucle le tableau $arr et affichez à l'écran la colonne des propriétés name des objets qui appartiennent précisément à la classe User, c'est-à-dire ni à la classe City ni à la classe Employee.