Advertisement
phpist

Untitled

Oct 23rd, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1.  
  2.  
  3. Объясните как произошел вывод и работу __get, __set и __call
  4.  
  5.  
  6. Листинг 22.18. Перехват обращений к членам класса. Файл overload.php
  7. <?php ## Перехват обращений к членам класса
  8. class Hooker
  9. {
  10. // Обычное свойство класса
  11. public $opened = 'opened';
  12. // Обычный метод класса
  13. public function method() { echo "Whoa, deja vu.<br />"; }
  14. // В этом массиве будут храниться все "виртуальные" свойства
  15. private $vars
  16. = array();
  17. // Перехват получения значения свойства
  18. public function __get($name)
  19. {
  20. echo "Перехват: получаем значение $name.<br />";
  21. // Возвращаем null, если "виртуальное" свойство еще не определено
  22. return isset($this->vars[$name])? $this->vars[$name] : null;
  23. }
  24. // Перехват установки значения свойства
  25. public function __set($name, $value)
  26. {
  27. echo "Перехват: устанавливаем значение $name равным '$value'.<br />";
  28. // Перед записью значения удаляем пробелы
  29. return $this->vars[$name] = trim($value);
  30. }
  31. // Перехват вызова несуществующего метода
  32. public function __call($name, $args)
  33. {
  34. echo "Перехват: вызываем $name с аргументами: ";
  35. var_dump($args);
  36. return $args[0];
  37. }
  38. }
  39. // Иллюстрация работы класса
  40. $obj = new Hooker();
  41. echo "<b>Получаем значение обычного свойства.</b><br />";
  42. echo "Значение: {$obj->opened}<br />";
  43. echo "<b>Вызываем обычный метод.</b><br />";
  44. $obj->method();
  45. echo "<b>Присваивание несуществующему свойству.</b><br />";
  46. $obj->nonExistent = 101;
  47. echo "<b>Получение значения несуществующего свойства.</b><br />";
  48. echo "Значение: {$obj->nonExistent}<br />";
  49. echo "<b>Обращение к несуществующему методу.</b><br />";
  50. $obj->nonExistent(6);
  51. ?>Глава 22. Объекты и классы
  52. 449
  53. Результатом работы этого скрипта будет следующий текст:
  54. Получаем значение обычного свойства.
  55. Значение: opened
  56. Вызываем обычный метод.
  57. Whoa, deja vu.
  58. Присваивание несуществующему свойству.
  59. Перехват: устанавливаем значение nonexistent равным '101'.
  60. Получение значения несуществующего свойства.
  61. Перехват: получаем значение nonExistent.
  62. Значение: 101
  63. Обращение к несуществующему методу.
  64. Перехват: вызываем nonExistent с аргументами: array(1){[0]=>int(6)}
  65. ……………………………….
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement