Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Объясните как произошел вывод и работу __get, __set и __call
- Листинг 22.18. Перехват обращений к членам класса. Файл overload.php
- <?php ## Перехват обращений к членам класса
- class Hooker
- {
- // Обычное свойство класса
- public $opened = 'opened';
- // Обычный метод класса
- public function method() { echo "Whoa, deja vu.<br />"; }
- // В этом массиве будут храниться все "виртуальные" свойства
- private $vars
- = array();
- // Перехват получения значения свойства
- public function __get($name)
- {
- echo "Перехват: получаем значение $name.<br />";
- // Возвращаем null, если "виртуальное" свойство еще не определено
- return isset($this->vars[$name])? $this->vars[$name] : null;
- }
- // Перехват установки значения свойства
- public function __set($name, $value)
- {
- echo "Перехват: устанавливаем значение $name равным '$value'.<br />";
- // Перед записью значения удаляем пробелы
- return $this->vars[$name] = trim($value);
- }
- // Перехват вызова несуществующего метода
- public function __call($name, $args)
- {
- echo "Перехват: вызываем $name с аргументами: ";
- var_dump($args);
- return $args[0];
- }
- }
- // Иллюстрация работы класса
- $obj = new Hooker();
- echo "<b>Получаем значение обычного свойства.</b><br />";
- echo "Значение: {$obj->opened}<br />";
- echo "<b>Вызываем обычный метод.</b><br />";
- $obj->method();
- echo "<b>Присваивание несуществующему свойству.</b><br />";
- $obj->nonExistent = 101;
- echo "<b>Получение значения несуществующего свойства.</b><br />";
- echo "Значение: {$obj->nonExistent}<br />";
- echo "<b>Обращение к несуществующему методу.</b><br />";
- $obj->nonExistent(6);
- ?>Глава 22. Объекты и классы
- 449
- Результатом работы этого скрипта будет следующий текст:
- Получаем значение обычного свойства.
- Значение: opened
- Вызываем обычный метод.
- Whoa, deja vu.
- Присваивание несуществующему свойству.
- Перехват: устанавливаем значение nonexistent равным '101'.
- Получение значения несуществующего свойства.
- Перехват: получаем значение nonExistent.
- Значение: 101
- Обращение к несуществующему методу.
- Перехват: вызываем nonExistent с аргументами: array(1){[0]=>int(6)}
- ……………………………….
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement