Tulajdonságok elérése mágiával az OOP-ban PHP-ben

A következő mágikus metódus, amit megvizsgálunk, a __get nevet viseli. Ez a metódus akkor aktiválódik, amikor egy privát vagy védett tulajdonság értékét próbáljuk elolvasni.

Ha a __get metódust megvalósítjuk valamilyen osztályban, akkor minden nem létező vagy rejtett tulajdonsághoz való hozzáférést ez a metódus fogja kezelni.

Eközben a PHP automatikusan továbbítja a kért tulajdonság nevét ennek a metódusnak az első paramétereként, és a metódus által visszaadott értéket a tulajdonság értékeként fogja értelmezni, amelyhez a hozzáférés történt.

Valószínűleg még nem teljesen világos, hogy ez hogyan működik, ezért nézzünk egy gyakorlati példát. Tegyük fel, hogy van egy Test osztályunk privát és publikus tulajdonságokkal:

Test.php<?php
  class Test
  {
    public  $prop1 = 1; // publikus tulajdonság
    private $prop2 = 2; // privát tulajdonság
  }
?>

Adjunk hozzá az osztályunkhoz egy mágikus metódust __get, amely kezdetben egyszerűen visszaadja annak a tulajdonságnak a nevét, amelyhez a hozzáférés történt:

Test.php<?php
  class Test
  {
    public  $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $property; // egyszerűen visszaadjuk a tulajdonság nevét
    }
  }
?>

Vizsgáljuk meg a létrehozott mágikus metódus működését. Forduljunk három típusú tulajdonsághoz: publikus tulajdonsághoz, priváthoz és nem létezőhöz:

index.php<?php
  $test = new Test;
  
  // Publikus tulajdonsághoz fordulunk:
  echo $test->prop1; // kiír 1 - azaz a tulajdonság értékét
  
  // Privát tulajdonsághoz fordulunk:
  echo $test->prop2; // kiír 'prop2' - a tulajdonság neve
  
  // Nem létező tulajdonsághoz fordulunk:
  echo $test->prop3; // kiír 'prop3' - a tulajdonság neve
?>

Amint látható, a mágikus metódusunk reagál a privát és nem létező tulajdonságokhoz való hozzáférésre, de figyelmen kívül hagyja a publikusokhoz való hozzáférést - azok továbbra is úgy működnek, ahogy korábban.