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