Достъп до свойства чрез магия в ООП в 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' - името на свойството
?>
Както виждате, нашият магически метод реагира на зверка към частни и несъществуващи свойства, но игнорира зверката към публичните - те работят така, както са работили досега.