⊗ppOpIhPPP 33 of 107 menu

Το πρόβλημα των ιδιωτικών ιδιοτήτων κατά την κληρονομικότητα στην ΑΟΠ στην PHP

Το γεγονός ότι οι ιδιωτικές ιδιότητες δεν κληρονομούνται, μπορεί να οδηγήσει σε ένα απρόσμενο πρόβλημα. Ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε την ακόλουθη γονική κλάση με μια ιδιωτική ιδιότητα:

<?php class User { private $age; public function setAge($age) { $this->age = $age; } public function getAge() { return $this->age; } } ?>

Ας υποθέσουμε ότι στην παιδική κλάση αποφασίσαμε να φτιάξουμε μια μέθοδο που θα αυξάνει την ηλικία κατά μία μονάδα. Ωστόσο, η προσπάθεια να αλλάξουμε την ιδιωτική ιδιότητα του γονέα θα οδηγήσει σε σφάλμα:

<?php class Student extends User { public function incAge() { $this->age++; // σφάλμα } } ?>

Το σφάλμα θα εξαφανιστεί εάν στην παιδική κλάση δηλώσουμε την ιδιωτική ιδιότητα $age:

<?php class Student extends User { private $age; public function incAge() { $this->age++; } } ?>

Εδώ μας περιμένει η παγίδα! Στην πραγματικότητα δημιουργήσαμε δύο ιδιωτικές ιδιότητες: μία στον γονέα και μία στον απόγονό. Και λειτουργούν εντελώς ανεξάρτητα. Αυτό σημαίνει ότι οι μέθοδοι του γονέα θα τροποποιούν τη δική τους ιδιότητα, ενώ οι μέθοδοι του απογόνου - τις δικές τους.

Αυτό το πρόβλημα στην πραγματικότητα έχει λύση. Απλά χρειάζεται να χειριζόμαστε τις ιδιωτικές ιδιότητες του γονέα μέσω των μεθόδων αυτού του γονέα. Ας ξαναγράψουμε τον κώδικά μας σύμφωνα με αυτό:

<?php class Student extends User { public function incAge() { $age = $this->getAge(); $age++; $this->setAge($age); } } ?>

Μπορούμε να απλοποιήσουμε:

<?php class Student extends User { public function incAge() { $this->setAge($this->getAge() + 1); } } ?>

Στον επόμενο κώδικα, στην παιδική κλάση υπερκαλύπτεται η μέθοδος του γονέα. Διορθώστε τα προβλήματα σε αυτόν τον κώδικα:

<?php class User { private $name; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } class Employee extends User { public function setName($name) { if (strlen($name) > 0) { $this->name = $name; // σφάλμα } } } ?>
Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη