Задать вопрос

Как сбрасывать состояние объекта?

Возникают ситуации, когда объекту нужно некое значение, которое:

1. Не может быть записано в свойство) в конструкторе.
2. Используется почти всеми методами (передавать его каждому методу - не лучшая идея, нужно писать в свойство).
3. Может меняться в ходе выполнения программы.

Скажем, есть класс ImagesDrawer, у которого есть поле $prepend_url - при отрисовке изображений он будет добавлять этот путь к src картинок.
И вот экземпляр этого объекта используется в разных местах - в базовом слое View, в слоях типа User (отрисовка аватара на карточке юзера например). И в каждом контексте нужны разные значения prepend_url.
Как я уже сказал, методов, использующих это значение, много, потому записывать его надо в свойство, из клиентского кода:

$drawer->setPrependUrl($pre_url);
$img = $drawer->draw(...


И тут возникает проблема: один слой установил своё значение, а другому слою, например, надо это значение оставить пустым - а они используют один и тот же объект, и о его текущем состоянии знать не могут. Как быть в таких случаях? Передавать из базового слоя в дочерние клон объекта? Или сбрасывать значение при каждом обращении к объекту? Или как-то в конце каждого метода сбрасывать установленное значение?
Последние время часто наталкиваюсь на эту проблему. Какие есть стандартные решения?

Хочется чтобы в каждом слое надо было просто вызвать draw, если prepend_url не нужен, а сеттер вызывать только при необходимости значения.
  • Вопрос задан
  • 96 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
VladimirAndreev
@VladimirAndreev
php web dev
а почему $pre_url не сделать аргументом у draw?
Ответ написан
@Wol_fi
php, js, mysql, highload
Если используете один и тот же объект - то только передавать параметром в метод.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы