instanceof-operaattori ja perintä OOP:ssa PHP:ssä

Käydään läpi perinnän erityispiirteet käytettäessä instanceof-operaattoria. Oletetaan, että meillä on yliluokka ja aliluokka:

index.php<?php
  // Yliluokka:
  class ParentClass
  {
    
  }
  
  // Aliluokka:
  class ChildClass extends ParentClass
  {
    
  }
?>

Luodaan olio aliluokasta:

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

Tarkastetaan nyt instanceof:n avulla, kuuluuko olioomme luokkaan ParentClass ja luokkaan ChildClass:

index.php<?php
  var_dump($obj instanceof ChildClass);  // tulostaa true
  var_dump($obj instanceof ParentClass); // tulostaa myös true
?>

Kuten esimerkistä näet - instanceof-operaattori ei tee eroa tarkastettaessa yli- ja aliluokkien välillä.

Älä hämäänny - jos olio on todella yliluokasta, niin tietysti tarkastus kuuluvuudesta aliluokkaan palauttaa false:

php<?php
  $obj = new ParentClass; // yliluokan olio
  
  var_dump($obj instanceof ParentClass); // tulostaa true
  var_dump($obj instanceof ChildClass);  // tulostaa false
?>
Задание 1

Tee luokka User, jossa on julkiset ominaisuudet name ja surname.

Задание 2

Tee luokka Employee, joka perii luokasta User ja lisää ominaisuuden salary.

Задание 3

Tee luokka City, jossa on julkiset ominaisuudet name ja population.

Задание 4

Luo 3 kappaletta luokan User oliota, 3 kappaletta luokan Employee oliota, 3 kappaletta luokan City oliota, ja satunnaisessa järjestyksessä tallenna ne taulukkoon $arr.

Задание 5

Käy läpi silmukalla taulukko $arr ja tulosta näytölle name-ominaisuuksien sarake niille olioille, jotka kuuluvat luokkaan User tai sen aliluokkaan.

Задание 6

Käy läpi silmukalla taulukko $arr ja tulosta näytölle name-ominaisuuksien sarake niille olioille, jotka eivät kuulu luokkaan User tai sen aliluokkaan.

Задание 7

Käy läpi silmukalla taulukko $arr ja tulosta näytölle name-ominaisuuksien sarake niille olioille, jotka kuuluvat nimenomaan luokkaan User, eli eivät luokkaan City eikä luokkaan Employee.