За последние 24 часа нас посетили 22893 программиста и 1236 роботов. Сейчас ищут 795 программистов ...

Это объясните Перехват: устанавливаем значение nonexistent равным '101'. Получение значения несущест

Тема в разделе "PHP для новичков", создана пользователем ubunta3.0, 23 окт 2019.

  1. ubunta3.0

    ubunta3.0 Зэк
    [ БАН ]

    С нами с:
    23 окт 2019
    Сообщения:
    22
    Симпатии:
    2
    Код (Text):
    1. Объясните как произошел вывод и работу __get, __set и __call
    2. Листинг 22.18. Перехват обращений к членам класса. Файл overload.php
    3. <?php ## Перехват обращений к членам класса
    4. class Hooker
    5. {
    6. // Обычное свойство класса
    7. public $opened = 'opened';
    8. // Обычный метод класса
    9. public function method() { echo "Whoa, deja vu.<br />"; }
    10. // В этом массиве будут храниться все "виртуальные" свойства
    11. private $vars
    12. = array();
    13. // Перехват получения значения свойства
    14. public function __get($name)
    15. {
    16. echo "Перехват: получаем значение $name.<br />";
    17. // Возвращаем null, если "виртуальное" свойство еще не определено
    18. return isset($this->vars[$name])? $this->vars[$name] : null;
    19. }
    20. // Перехват установки значения свойства
    21. public function __set($name, $value)
    22. {
    23. echo "Перехват: устанавливаем значение $name равным '$value'.<br />";
    24. // Перед записью значения удаляем пробелы
    25. return $this->vars[$name] = trim($value);
    26. }
    27. // Перехват вызова несуществующего метода
    28. public function __call($name, $args)
    29. {
    30. echo "Перехват: вызываем $name с аргументами: ";
    31. var_dump($args);
    32. return $args[0];
    33. }
    34. }
    35. // Иллюстрация работы класса
    36. $obj = new Hooker();
    37. echo "<b>Получаем значение обычного свойства.</b><br />";
    38. echo "Значение: {$obj->opened}<br />";
    39. echo "<b>Вызываем обычный метод.</b><br />";
    40. $obj->method();
    41. echo "<b>Присваивание несуществующему свойству.</b><br />";
    42. $obj->nonExistent = 101;
    43. echo "<b>Получение значения несуществующего свойства.</b><br />";
    44. echo "Значение: {$obj->nonExistent}<br />";
    45. echo "<b>Обращение к несуществующему методу.</b><br />";
    46. $obj->nonExistent(6);
    47. ?>Глава 22. Объекты и классы
    48. 449
    49. Результатом работы этого скрипта будет следующий текст:
    50. Получаем значение обычного свойства.
    51. Значение: opened
    52. Вызываем обычный метод.
    53. Whoa, deja vu.
    54. Присваивание несуществующему свойству.
    55. Перехват: устанавливаем значение nonexistent равным '101'.
    56. Получение значения несуществующего свойства.
    57. Перехват: получаем значение nonExistent.
    58. Значение: 101
    59. Обращение к несуществующему методу.
    60. Перехват: вызываем nonExistent с аргументами: array(1){[0]=>int(6)}
    --- Добавлено ---
    Перехват: устанавливаем значение nonexistent равным '101'.
    Получение значения несуществующего свойства.
    Перехват: получаем значение nonExistent.
    Значение: 101
     
  2. ubunta3.0

    ubunta3.0 Зэк
    [ БАН ]

    С нами с:
    23 окт 2019
    Сообщения:
    22
    Симпатии:
    2
    все мне ясно стало теперь
     
  3. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    @ubunta3.0 тебе нельзя в раздел "Для профи".
    > Темы повышенной сложности. Новичкам здесь не место.