# Применение метода __get для несуществующего свойства

В примере, приведенном в предыдущем уроке, мы применяли магию метода `__get` для отлавливания обращения к приватным свойствам. На самом деле этот метод также может быть полезен для отлавливания обращений к несуществующим свойствам.

Посмотрим на практическом примере. Пусть у нас есть класс `User` с фамилией, именем и отчеством, являющимися публичными свойствами:

`<?php class User { public $surname; public $name; public $patronymic; } $user = new User; $user->surname = 'Иванов'; $user->name = 'Иван'; $user->patronymic = 'Иванович'; ?>`

Давайте сделаем так, чтобы объект класса вел себя так, будто у него также есть свойство `fullname`, выводящее ФИО юзера:

`<?php $user = new User; $user->surname = 'Иванов'; $user->name = 'Иван'; $user->patronymic = 'Иванович'; // Выведет 'Иванов Иван Иванович': echo $user->fullname; // это пока не работает, является нашей целью ?>`

Используем для этого наш магический метод `__get`:

`<?php class User { public $surname; public $name; public $patronymic; // Используем метод-перехватчик: public function __get($property) { // Если идет обращение к свойству fullname: if ($property == 'fullname') { return $this->surname . ' ' . $this->name . ' ' . $this->patronymic; } } } ?>`

Проверим:

`<?php $user = new User; $user->surname = 'Иванов'; $user->name = 'Иван'; $user->patronymic = 'Иванович'; echo $user->fullname; // выведет 'Иванов Иван Иванович' ?>`

Получается, что с помощью `__get` мы создали в классе виртуальное свойство: в классе его нет, но прочитать его можно.

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

Сделайте класс `Date` с публичными свойствами `year`, `month` и `day`.

С помощью магии сделайте свойство `weekDay`, которое будет возвращать день недели, соответствующий дате.

← →
↑