⊗ppOpMgSP 91 of 107 menu

Εγγραφή ιδιοτήτων μέσω μαγείας στην ΑΑΠ στην PHP

Η μαγική μέθοδος __set καλείται όταν γίνεται προσπάθεια αλλαγής της τιμής μιας μη υπάρχουσας ή κρυφής ιδιότητας. Ως παραμέτρους δέχεται το όνομα της ιδιότητας και την τιμή, που προσπαθούν να της ανατεθούν.

Ας δούμε ένα πρακτικό παράδειγμα. Ας υποθέσουμε ότι μας δίνεται η ακόλουθη κλάση Test:

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

Ας φτιάξουμε σε αυτήν την κλάση τη μαγική μέθοδο __set, που με τη βοήθεια της συνάρτησης var_dump θα εμφανίζει το όνομα της ιδιότητας, προς την οποία έγινε πρόσβαση, και την τιμή, που προσπαθούν να ορίσουν σε αυτήν την ιδιότητα:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { var_dump($property . ' ' .$value); } } ?>

Ας ελέγξουμε τη λειτουργία της κλάσης μας:

<?php $test = new Test; $test->prop = 'value'; // το var_dump της μεθόδου __set θα εμφανίσει 'prop value' ?>

Ας ορίζουμε τώρα τιμή στην ιδιότητα, το όνομα της οποίας αποθηκεύεται στη μεταβλητή $property:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; // ορίζουμε την τιμή } } ?>

Τώρα μπορούμε να γράφουμε σε ιδιωτικές ιδιότητες από έξω από την κλάση:

<?php $test = new Test; $test->prop1 = 1; // θα γράψουμε 1 $test->prop2 = 2; // θα γράψουμε 2 ?>

Μπορούμε να γράψουμε, ωστόσο, να ελέγξουμε αν γράφτηκε κάτι εκεί - όχι, αφού οι ιδιότητες είναι ιδιωτικές.

Μπορούμε να φτιάξουμε έναν getter για αυτές τις ιδιότητες ή απλά να χρησιμοποιήσουμε τη μαγική μέθοδο __get. Ας χρησιμοποιήσουμε τη δεύτερη επιλογή:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; } // Μαγικός getter ιδιοτήτων: public function __get($property) { return $this->$property; } } ?>

Τώρα μπορούμε να ελέγξουμε τη λειτουργία της κλάσης μας. Ας ελέγξουμε:

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

Στην πραγματικότητα, φυσικά, δεν πρέπει να επιτρέπουμε σε όλους χωρίς διάκριση να γράφουν σε ιδιωτικές ιδιότητες, διαφορετικά χάνεται το νόημα αυτών των ιδιωτικών ιδιοτήτων (είναι πιο εύκολο να τις κάνουμε δημόσιες και τέλος).

Επομένως, αυτή η μέθοδος πρέπει να εφαρμόζεται μόνο όταν πραγματικά υπάρχει ανάγκη. Στα επόμενα μαθήματα θα δούμε και άλλα παραδείγματα επιτυχημένης εφαρμογής της.

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