Získávání vlastností pomocí magie v OOP v PHP

Další magická metoda, kterou si rozebereme, se jmenuje __get. Tato metoda se aktivuje při pokusu o čtení hodnoty privátní nebo chráněné vlastnosti.

Pokud je metoda __get implementována v nějaké třídě, pak všechny pokusy o přístup k neexistujícím nebo skrytým vlastnostem budou zpracovány touto metodou.

PHP automaticky předá název požadované vlastnosti jako první parametr této metody, a vrácená hodnota této metody bude interpretována jako hodnota vlastnosti, ke které došlo k pokusu o přístup.

Nejspíš zatím není úplně jasné, jak to funguje, proto se podívejme na praktický příklad. Mějme následující třídu Test s privátní a veřejnou vlastností:

Test.php<?php
  class Test
  {
    public  $prop1 = 1; // veřejná vlastnost
    private $prop2 = 2; // privátní vlastnost
  }
?>

Nyní přidejme do naší třídy magickou metodu __get, která pro začátek bude jednoduše vracet název vlastnosti, ke které došlo k přístupu:

Test.php<?php
  class Test
  {
    public  $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $property; // jednoduše vrátíme název vlastnosti
    }
  }
?>

Ověřme si fungování vytvořené magické metody. Pokusme se přistoupit ke třem typům vlastností: k veřejné vlastnosti, k privátní a k neexistující:

index.php<?php
  $test = new Test;
  
  // Přistupujeme k veřejné vlastnosti:
  echo $test->prop1; // vypíše 1 - tedy hodnotu vlastnosti
  
  // Přistupujeme k privátní vlastnosti:
  echo $test->prop2; // vypíše 'prop2' - název vlastnosti
  
  // Přistupujeme k neexistující vlastnosti:
  echo $test->prop3; // vypíše 'prop3' - název vlastnosti
?>

Jak vidíte, naše magická metoda reaguje na přístup k privátním a neexistujícím vlastnostem, ale ignoruje přístup k veřejným - ty fungují tak, jako fungovaly dříve.