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