Dobijanje osobina kroz magiju u OOP-u u PHP-u
Sledeća magična metoda koju ćemo
razmotriti zove se __get. Ova
metoda se aktivira prilikom pokušaja čitanja vrednosti
privatne ili zaštićene osobine.
Ako se implementira metoda __get u nekoj
klasi, onda će svi pristupi nepostojećim
ili skrivenim osobinama biti obrađeni
tom metodom.
Prilikom toga, PHP će automatski proslediti ime tražene osobine u prvi parametar ove metode, a vrednost koju vrati ova metoda biće shvaćena kao vrednost osobine kojoj je pristupljeno.
Verovatno za sada nije baš jasno, kako ovo
funkcioniše, zato da pogledamo praktičan
primer. Neka postoji ovakva klasa
Test sa privatnom i javnom
osobinom:
<?php
class Test
{
public $prop1 = 1; // javna osobina
private $prop2 = 2; // privatna osobina
}
?>
Dodajmo našoj klasi magičnu metodu
__get, koja će za početak jednostavno
vraćati ime osobine kojoj je pristupljeno:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // jednostavno vratimo ime osobine
}
}
?>
Proverimo rad kreirane magične metode. Pristupimo trima tipovima osobina: javnoj osobini, privatnoj i nepostojećoj:
<?php
$test = new Test;
// Pristupamo javnoj osobini:
echo $test->prop1; // ispisaće 1 - odnosno vrednost osobine
// Pristupamo privatnoj osobini:
echo $test->prop2; // ispisaće 'prop2' - ime osobine
// Pristupamo nepostojećoj osobini:
echo $test->prop3; // ispisaće 'prop3' - ime osobine
?>
Kao što vidite, naša magična metoda reaguje na pristup privatnim i nepostojećim osobinama, ali ignoriše pristup javnim - one rade kao što su i ranje radile.