Savybių gavimas per magiją OOP PHP
Kitas magiškas metodas, kurį nagrinėsime,
vadinamas __get. Šis
metodas suveikia bandant perskaityti reikšmę
iš privacios arba apsaugotos savybės.
Jeigu klasėje realizuotas metodas __get, tai visos kreipimaisi į neegzistuojančias
ar paslėptas savybes bus apdorojamos
šiuo metodu.
Tuomet PHP automatiškai perduos užklaustos savybės pavadinimą į pirmąjį parametrą šio metodo, o šio metodo grąžinta reikšmė bus priimta kaip savybės, į kurią buvo kreiptasi, reikšmė.
Greičiausiai kol kas nelabai aišku, kaip tai
veikia, todėl pažiūrėkime praktiniu
pavyzdžiu. Tarkime, kad turime tokią Test klasę
su privacia ir vieša
savybėmis:
<?php
class Test
{
public $prop1 = 1; // vieša savybė
private $prop2 = 2; // privati savybė
}
?>
Į savo klasę pridėkime magiškąjį metodą
__get, kuris iš pradžių tiesiog
grąžins savybės, į kurią buvo kreiptasi, pavadinimą:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // tiesiog grąžinsime savybės pavadinimą
}
}
?>
Patikrinkime sukurtų magiškųjų metodų veikimą. Kreipkimės į tris savybių tipus: į viešą savybę, į privatų ir į neegzistuojančią:
<?php
$test = new Test;
// Kreipiamės į viešą savybę:
echo $test->prop1; // išves 1 - tai yra savybės reikšmė
// Kreipiamės į privatų savybę:
echo $test->prop2; // išves 'prop2' - savybės pavadinimas
// Kreipiamės į neegzistuojančią savybę:
echo $test->prop3; // išves 'prop3' - savybės pavadinimas
?>
Kaip matote, mūsų magiškas metodas reaguoja į kreipimąsi į privacias ir neegzistuojančias savybes, bet ignoruoja kreipimąsi į viešas - jos veikia taip, kaip ir veikė anksčiau.