Достъп до свойства чрез магия в ООП в PHP

Следващият магически метод, който ще разгледаме, се нарича __get. Този метод се активира при опит за четене на стойността на частно или защитено свойство.

Ако се реализира метод __get в даден клас, то всички зверки към несъществуващи или скрити свойства ще се обработват от този метод.

При това PHP автоматично ще предава името на заявеното свойство в първия параметър на този метод, а върнатата от този метод стойност ще се приеме за стойност на свойството, към което е осъществен достъп.

Най-вероятно все още не е много ясно как това работи, затова нека да разгледаме практически пример. Нека имаме следния клас Test със частно и публично свойство:

Test.php<?php
  class Test
  {
    public  $prop1 = 1; // публично свойство
    private $prop2 = 2; // частно свойство
  }
?>

Нека добавим в нашия клас магическия метод __get, който за начало просто ще връща името на свойството, към което е осъществен достъп:

Test.php<?php
  class Test
  {
    public  $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $property; // просто връщаме името на свойството
    }
  }
?>

Нека проверим работата на създадения магически метод. Да се обърнем към три типа свойства: към публичното свойство, към частното и към несъществуващо:

index.php<?php
  $test = new Test;
  
  // Обръщаме се към публичното свойство:
  echo $test->prop1; // ще изведе 1 - тоест стойността на свойството
  
  // Обръщаме се към частното свойство:
  echo $test->prop2; // ще изведе 'prop2' - името на свойството
  
  // Обръщаме се към несъществуващо свойство:
  echo $test->prop3; // ще изведе 'prop3' - името на свойството
?>

Както виждате, нашият магически метод реагира на зверка към частни и несъществуващи свойства, но игнорира зверката към публичните - те работят така, както са работили досега.