Operator instanceof in dedovanje v OOP v PHP
Oglejmo si posebnosti dedovanja pri uporabi
operatorja instanceof. Recimo, da imamo nadrejeni razred
in podrejeni razred:
<?php
// Nadrejeni razred:
class ParentClass
{
}
// Podrejeni razred:
class ChildClass extends ParentClass
{
}
?>
Ustvarimo objekt podrejenega razreda:
<?php
$obj = new ChildClass;
?>
Preverimo zdaj s pomočjo instanceof,
ali naš objekt pripada razredu ParentClass
in razredu ChildClass:
<?php
var_dump($obj instanceof ChildClass); // izpiše true
var_dump($obj instanceof ParentClass); // prav tako izpiše true
?>
Kot vidite iz primera - operator instanceof
ne dela razlik pri preverjanju med nadrejenimi
in podrejenimi razredi.
Ne zmedite se - če je objekt resnično
iz nadrejenega razreda, potem bo preverjanje
pripadnosti podrejenemu razredu vrnilo
false:
<?php
$obj = new ParentClass; // objekt nadrejenega razreda
var_dump($obj instanceof ParentClass); // izpiše true
var_dump($obj instanceof ChildClass); // izpiše false
?>
Naredite razred User z javnimi lastnostmi
name in surname.
Naredite razred Employee, ki bo
podedoval od razreda User in dodal
lastnost salary.
Naredite razred City z javnimi lastnostmi
name in population.
Ustvarite 3 objekte razreda User,
3 objekte razreda Employee,
3 objekte razreda City, in jih
v poljubnem vrstnem redu zapišite v tabelo
$arr.
Preglejte z zanko tabelo $arr in izpišite
na zaslon stolpec lastnosti name tistih
objektov, ki pripadajo razredu User
ali potomcu tega razreda.
Preglejte z zanko tabelo $arr in izpišite
na zaslon stolpec lastnosti name tistih
objektov, ki ne pripadajo razredu User
ali potomcu tega razreda.
Preglejte z zanko tabelo $arr in izpišite
na zaslon stolpec lastnosti name tistih
objektov, ki pripadajo natančno razredu
User, to pomeni ne razredu City
in ne razredu Employee.