Pobieranie właściwości przez magię w OOP w PHP

Następna magiczna metoda, którą przeanalizujemy, nazywa się __get. Ta metoda uruchamia się przy próbie odczytania wartości prywatnej lub chronionej właściwości.

Jeśli zaimplementujemy metodę __get w jakiejś klasie, to wszystkie odwołania do nieistniejących lub ukrytych właściwości będą obsługiwane przez tę metodę.

Przy tym PHP automatycznie będzie przekazywać nazwę żądanej właściwości w pierwszym parametrze tej metody, a zwracana przez tę metodę wartość będzie postrzegana jako wartość właściwości, do której nastąpiło odwołanie.

Prawdopodobnie na razie nie bardzo jest zrozumiale, jak to działa, dlatego spójrzmy na praktycznym przykładzie. Niech mamy taką klasę Test z prywatną i publiczną właściwościami:

Test.php<?php
  class Test
  {
    public  $prop1 = 1; // publiczna właściwość
    private $prop2 = 2; // prywatna właściwość
  }
?>

Dodajmy do naszej klasy magiczną metodę __get, która na początek będzie po prostu zwracać nazwę właściwości, do której nastąpiło odwołanie:

Test.php<?php
  class Test
  {
    public  $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $property; // po prostu zwróćmy nazwę właściwości
    }
  }
?>

Sprawdźmy działanie stworzonej magicznej metody. Odwołajmy się do trzech typów właściwości: do publicznej właściwości, do prywatnej i do nieistniejącej:

index.php<?php
  $test = new Test;
  
  // Odwołujemy się do publicznej właściwości:
  echo $test->prop1; // wypisze 1 - czyli wartość właściwości
  
  // Odwołujemy się do prywatnej właściwości:
  echo $test->prop2; // wypisze 'prop2' - nazwa właściwości
  
  // Odwołujemy się do nieistniejącej właściwości:
  echo $test->prop3; // wypisze 'prop3' - nazwa właściwości
?>

Jak widzicie, nasza magiczna metoda reaguje na odwołanie do prywatnych i nieistniejących właściwości, ale ignoruje odwołanie do publicznych - one działają tak, jak działały wcześniej.