⊗ppOpMgROP 89 of 107 menu

Ιδιότητες Μόνο για Ανάγνωση στην OOP στην PHP

Ας εξετάσουμε μια κλάση στην οποία όλες οι ιδιότητες είναι ιδιωτικές:

<?php class Test { private $prop1 = 1; private $prop2 = 2; } ?>

Τώρα ας τις κάνουμε να είναι προσβάσιμες από τον εξωτερικό κόσμο μόνο για ανάγνωση. Έχουμε κάνει κάτι παρόμοιο στο παρελθόν, δημιουργώντας μεθόδους λήψης (getters) για κάθε ιδιότητα και χωρίς να δημιουργούμε μεθόδους εκχώρησης (setters).

Ας λύσουμε τώρα αυτό το πρόβλημα χρησιμοποιώντας τη μαγική μέθοδο __get. Θα επιστρέφουμε μέσα σε αυτήν την τιμή της ζητούμενης ιδιότητας. Πώς να το κάνετε αυτό: το όνομα της ζητούμενης ιδιότητας περνάει στην παράμετρο της μεθόδου __get, στην περίπτωσή μας $property.

Αυτό σημαίνει ότι μπορούμε να διαβάσουμε την ιδιότητα, το όνομα της οποίας είναι αποθηκευμένο σε μια μεταβλητή, έτσι: $this->$property (το όνομα της ιδιότητας θα είναι μια μεταβλητή, δηλαδή με δολάριο στην αρχή, το οποίο έχουμε μάθει σε προηγούμενα μαθήματα).

Ας φτιάξουμε την περιγραφείσα μέθοδο __get:

<?php class Test { private $prop1 = 1; private $prop2 = 2; public function __get($property) { return $this->$property; } } ?>

Ας τη χρησιμοποιήσουμε για ανάγνωση των ιδιοτήτων:

<?php $test = new Test; echo $test->prop1; // θα εμφανίσει 1 echo $test->prop2; // θα εμφανίσει 2 ?>

Η προσπάθεια να γράψετε κάτι στην ιδιότητα θα οδηγήσει σε σφάλμα:

<?php $test = new Test; $test->prop1 = 2; // θα δώσει σφάλμα ?>

Αυτό είναι ακριβώς αυτό που χρειαζόμαστε: η ιδιότητα μπορεί να διαβαστεί, αλλά δεν μπορεί να γραφτεί.

Η προσπάθεια ανάγνωσης μιας μη υπάρχουσας ιδιότητας θα δώσει σφάλμα:

<?php $test = new Test; echo $test->prop3; // θα δώσει σφάλμα ?>

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

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

Ας υποθέσουμε ότι δίνεται η ακόλουθη κλάση User, της οποίας οι ιδιότητες είναι προσβάσιμες μόνο για ανάγνωση χρησιμοποιώντας μεθόδους λήψης (getters):

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

Μετατρέψτε τον κώδικα αυτής της κλάσης έτσι ώστε αντί για μεθόδους λήψης (getters) να χρησιμοποιείται η μαγική μέθοδος __get.

Ελληνικά
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 για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη