Атрыманне ўласцівасцяў праз магію ў ААП у PHP
Наступны магічны метад, які мы з
вамі разбяром, называецца __get. Гэты
метад спрацоўвае пры спробе прачытаць значэнне
прыватнай або абароненай уласцівасці.
Калі рэалізаваць метад __get у якім-небудзь
класе, то ўсе звароты да неіснуючых
ці схаваных уласцівасцяў будуць апрацоўвацца
гэтым метадам.
Пры гэтым PHP аўтаматычна будзе перадаваць імя запатрабаванай уласцівасці ў першы параметр гэтага метаду, а вернутае гэтым метадам значэнне будзе ўспрынята як значэнне ўласцівасці, да якой адбыўся зварот.
Хутчэй за ўсцаноўку пакуль не вельмі зразумела, як гэта
працуе, таму давайце паглядзім на практычным
прыкладзе. Хай у нас ёсць вось такі клас
Test з прыватнай і публічнай
уласцівасцямі:
<?php
class Test
{
public $prop1 = 1; // публічная ўласцівасць
private $prop2 = 2; // прыватная ўласцівасць
}
?>
Давайце дадамо ў наш клас магічны метад
__get, які для пачатку будзе проста
вяртаць імя ўласцівасці, да якой адбыўся
зварот:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // проста вернем імя ўласцівасці
}
}
?>
Давайце праверым працу створанага магічнага метаду. Звернемся да трох тыпаў уласцівасцяў: да публічнай уласцівасці, да прыватнай і да неіснуючай:
<?php
$test = new Test;
// Зварачаемся да публічнай уласцівасці:
echo $test->prop1; // выведзе 1 - гэта значэнне ўласцівасці
// Зварачаемся да прыватнай уласцівасці:
echo $test->prop2; // выведзе 'prop2' - імя ўласцівасці
// Зварачаемся да неіснуючай уласцівасці:
echo $test->prop3; // выведзе 'prop3' - імя ўласцівасці
?>
Як вы бачыце, наш магічны метад рэагуе на зварот да прыватных і неіснуючых уласцівасцяў, але ігнаруе зварот да публічных - яны працуюць так, як і працавалі раней.