Возникают ситуации, когда объекту нужно некое значение, которое:
1. Не может быть записано в свойство) в конструкторе.
2. Используется почти всеми методами (передавать его каждому методу - не лучшая идея, нужно писать в свойство).
3. Может меняться в ходе выполнения программы.
Скажем, есть класс ImagesDrawer, у которого есть поле $prepend_url - при отрисовке изображений он будет добавлять этот путь к src картинок.
И вот экземпляр этого объекта используется в разных местах - в базовом слое View, в слоях типа User (отрисовка аватара на карточке юзера например). И в каждом контексте нужны разные значения prepend_url.
Как я уже сказал, методов, использующих это значение, много, потому записывать его надо в свойство, из клиентского кода:
$drawer->setPrependUrl($pre_url);
$img = $drawer->draw(...
И тут возникает проблема: один слой установил своё значение, а другому слою, например, надо это значение оставить пустым - а они используют один и тот же объект, и о его текущем состоянии знать не могут. Как быть в таких случаях? Передавать из базового слоя в дочерние клон объекта? Или сбрасывать значение при каждом обращении к объекту? Или как-то в конце каждого метода сбрасывать установленное значение?
Последние время часто наталкиваюсь на эту проблему. Какие есть стандартные решения?
Хочется чтобы в каждом слое надо было просто вызвать draw, если prepend_url не нужен, а сеттер вызывать только при необходимости значения.