Магические методы php
Автор Неважно Неважно задал вопрос в разделе Другие языки и технологии
Магические методы PHP и получил лучший ответ
Ответ от Капитан Гугл[гуру]
Это называется инкапсуляция: методы __get и __set инкапсулируют данные, хранимые в переменной. Зачем? Чтобы не надо было переписывать код! Например, был написан большой фреймворк, и начиная с какого-то момента решили, что просто присваивания переменной недостаточно, нужно добавить еще запись в БД и добавление в лог сообщения об этом. Объем замены одного действия (присваивания) на 3 по всему тексту фреймворка - дохрена и больше. А так - меняем только __set - и вуаля, всюду, где было одно действие, их стало 3, а код не изменился!
Еще пример: предположим, что у нас есть какой-то объект с кучей кешированых параметров, например, треугольник, в котором хранятся данные о длине сторон, углах, высотах, медианах и т. д. Мы меняем одну сторону - значит, все остальные данные (прилежащие углы и т. д. ) надо менять. Вручную в каждом месте это прописывать неудобно; а так - пишем присваивание, а на самом деле выполняем кучу вычислений. Можно и наоборот: держать значения высот, медиан и др. вторичных параметров undefined до первого запроса, и только потом вычислять (это называется "ленивые вычисления"). Программа, запрашивающая высоту в треугольнике, может быть уверена, что это переменная - а на самом деле это __get, обрабатывающий данные только в момент обращения.
class Test {
private $property;
public function __set($key, $val) {
if (!is_scalar($val)) throw new Exception('Значение должно быть скалярным');
$this->$key = $val;
}
}
$test = new Test;
$test->property = 1; // значение будет успешно присвоено
$test->property = new Test; // будет ошибка
Это для простой реализации инкапсуляции, когда аксессоры ни к чему
---
Добавлено.
Не совсем. Это лишь пример. По некоторым концепциям, валидацией занимаются объекты валидации, а сущности данных лишь хранят в себе данные и состояние объекта.
Нужно в ООП вникнуть, чтобы понять, зачем это нужно
---
Добавлено.
private для скрытого свойства - если оно будет публичным, то __set не будет вызван. Теоретический пример может быть таким: - и из вне никак не отразится работоспособность с этим объектом
---
Добавлено.
Это все прекрасно описано на php.net в соответствующем разделе. Только стоит помнить, что они для публичных свойств не работают и их смысл быть аксессорами.
Какова тайна Бермудского треугольника?
Чтобы ответить на этот вопрос надо рассмотреть подробное описание морфологии морского дна этого
подробнее...
Что такое аффирмация?
В некоторых практиках духовного совершенство¬вания используется техника аффирмаций. Человек в
подробнее...
почему эту траву называют
- Священный базилик (тулси) является одной из священных трав Индии, посвященной Кришне и Вишну
подробнее...
Что такое Квантовая магия?
Разработанный комплекс С. И. Доронина техник, методик и упражнений, выведенный за 12 лет практики
подробнее...
Что такое Грейдинг в холдинге?
Грейдинг устанавливает и фиксирует ценность, которую конкретная работа добавляет организации.
подробнее...
Где растет каменный лес и какая легенда его образования?
КИТАЙ
Каменный Лес Ши Лин.
#yaimg69601#
#yaimg69602#
Камни имеют самую разную
подробнее...
наука древнего китая
Известно, что наука в древнем Китае была очень развита. Однако, она шла совершенно иным путем, чем
подробнее...
Когда появились первые стереокартинки? Как правильно рассматривать стереограммы?
Первые пробные стереокартинки появились еще в 1836 году.Первые стереограммы представляли собой две
подробнее...
Как переводится слово Фесса
Кэр Лаэда, некромант Неясыть)
Потомственный маг Долины, сын Витара Лаэды. Родители Фесса,
подробнее...
Сколько раз в неделю нужно поливать орхидею (ФАЛЕНОПСИС)
Каждый делает это по-своему, но можно предложить несколько простых способов: по весу горшка,
подробнее...
Почему демоны бояться соли?
Благодаря своему белому цвету соль издавна ассоциируется с жизнью и здоровьем и считается
подробнее...
Что представляет собой квадрат "ло шу"?
Одним из инструментов, которые применяются в фэн-шуй, является квадрат Ло Шу.
Согласно
подробнее...
Сообщение об драгоцеенном камне аметист
Аметист, минерал, фиолетовая разновидность кварца, SiO2. Название происходит от греч. «аметистос» –
подробнее...
Как воспитать в себе силу воли? Как стать сильным духом?
Если человек говорит: "Ничего страшного, что я нарушил режим",– первое, что он теряет – это
подробнее...
в чем разница=эзотерика мистика и магия?
эзотерика-изучение Законов Вселенной, не соответствующих общепринятым человеческим законам,
подробнее...