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í:
<?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:
<?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í:
<?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.