Ο Τελεστής instanceof και η Κληρονομικότητα στην αντικειμενοστρεφή προγραμματισμό στην PHP
Ας εξετάσουμε τα χαρακτηριστικά της κληρονομικότητας όταν χρησιμοποιούμε
τον τελεστή instanceof. Ας υποθέσουμε ότι έχουμε μια γονική κλάση
και μια παιδική κλάση:
<?php
// Γονική κλάση:
class ParentClass
{
}
// Παιδική κλάση:
class ChildClass extends ParentClass
{
}
?>
Ας δημιουργήσουμε ένα αντικείμενο της παιδικής κλάσης:
<?php
$obj = new ChildClass;
?>
Ας ελέγξουμε τώρα με τη βοήθεια του instanceof,
αν το αντικείμενό μας ανήκει στην κλάση ParentClass
και στην κλάση ChildClass:
<?php
var_dump($obj instanceof ChildClass); // θα εμφανίσει true
var_dump($obj instanceof ParentClass); // θα εμφανίσει επίσης true
?>
Όπως βλέπετε από το παράδειγμα - ο τελεστής instanceof
δεν κάνει διάκριση κατά τον έλεγχο μεταξύ γονικών
και παιδικών κλάσεων.
Μην μπερδεύεστε - εάν το αντικείμενο είναι πράγματι
της γονικής κλάσης, τότε, φυσικά, ο έλεγχος
για ανήκει στην παιδική κλάση θα επιστρέψει
false:
<?php
$obj = new ParentClass; // αντικείμενο γονικής κλάσης
var_dump($obj instanceof ParentClass); // θα εμφανίσει true
var_dump($obj instanceof ChildClass); // θα εμφανίσει false
?>
Δημιουργήστε μια κλάση User με δημόσιες ιδιότητες
name και surname.
Δημιουργήστε μια κλάση Employee, η οποία θα
κληρονομεί από την κλάση User και θα προσθέτει
την ιδιότητα salary.
Δημιουργήστε μια κλάση City με δημόσιες ιδιότητες
name και population.
Δημιουργήστε 3 αντικείμενα της κλάσης User,
3 αντικείμενα της κλάσης Employee,
3 αντικείμενα της κλάσης City, και με
τυχαία σειρά γράψτε τα σε έναν πίνακα
$arr.
Περιμένετε με βρόχο τον πίνακα $arr και εμφανίστε
στην οθόνη μια στήλη με τις ιδιότητες name εκείνων
των αντικειμένων, που ανήκουν στην κλάση User
ή σε απόγονό αυτής της κλάσης.
Περιμένετε με βρόχο τον πίνακα $arr και εμφανίστε
στην οθόνη μια στήλη με τις ιδιότητες name εκείνων
των αντικειμένων, που δεν ανήκουν στην κλάση User
ή σε απόγονό αυτής της κλάσης.
Περιμένετε με βρόχο τον πίνακα $arr και εμφανίστε
στην οθόνη μια στήλη με τις ιδιότητες name εκείνων
των αντικειμένων, που ανήκουν ακριβώς στην κλάση
User, δηλαδή όχι στην κλάση City
και όχι στην κλάση Employee.