⊗ppOpMgGP 88 of 107 menu

Λήψη ιδιοτήτων μέσω μαγείας στην ΑΑΠ στο PHP

Η επόμενη μαγική μέθοδος που θα εξετάσουμε μαζί σας ονομάζεται __get. Αυτή η μέθοδος ενεργοποιείται όταν γίνεται προσπάθεια ανάγνωσης της τιμής μιας ιδιωτικής ή προστατευμένης ιδιότητας.

Εάν υλοποιήσετε τη μέθοδο __get σε οποιαδήποτε κλάση, τότε όλες οι προσβάσεις σε μη υπάρχουσες ή κρυφές ιδιότητες θα επεξεργάζονται από αυτή τη μέθοδο.

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

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

<?php class Test { public $prop1 = 1; // δημόσια ιδιότητα private $prop2 = 2; // ιδιωτική ιδιότητα } ?>

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

<?php class Test { public $prop1 = 1; private $prop2 = 2; public function __get($property) { return $property; // απλώς επιστρέφουμε το όνομα της ιδιότητας } } ?>

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

<?php $test = new Test; // Προσπελαύνουμε τη δημόσια ιδιότητα: echo $test->prop1; // θα εμφανίσει 1 - δηλαδή την τιμή της ιδιότητας // Προσπελαύνουμε την ιδιωτική ιδιότητα: echo $test->prop2; // θα εμφανίσει 'prop2' - το όνομα της ιδιότητας // Προσπελαύνουμε μη υπάρχουσα ιδιότητα: echo $test->prop3; // θα εμφανίσει 'prop3' - το όνομα της ιδιότητας ?>

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

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