У меня есть этот Config
- класс, который я использую в своем приложении PHP5 для загрузки и анализа моей статической конфигурации. До сих пор мне удалось не допустить, чтобы класс был синглтоном / реестром, и вместо этого передал экземпляр класса Config
туда, где это было необходимо, с помощью внедрения зависимостей.
Но теперь, когда мне нужно установить / внести изменения в свой Config
во время выполнения в одном месте, мои изменения не отражаются глобально и находятся далеко от специалиста с использованием модификатора static
в PHP, Мне нужно спросить:
Как лучше всего гарантировать, что изменения свойств в моем Config
- классе отражаются во всем моем приложении, не превращая класс в синглтон? Могу я просто сделать переменную, содержащую данные конфигурации static
?
2 ответа
До сих пор мне удалось не допустить, чтобы класс был синглтоном / реестром, и вместо этого передал экземпляр класса Config туда, где это было необходимо, с помощью внедрения зависимостей.
Если вы передадите один и тот же экземпляр вашего класса Config
во все части вашего приложения и измените параметр, он должен отразиться везде.
Если вы создаете несколько объектов класса (и каждый раз анализируете этот файл конфигурации ?!), возможно, вы захотите прекратить это делать. Возможно, это расточительно, и я бы сказал, что это сбивает с толку.
Итак, если вы create only one
и передадите это, все должно будь умницей.
В предположении, что вы создаете несколько экземпляров объекта, которые должны существовать только один раз:
Если вы можете «исправить» свою архитектуру, чтобы это было возможно: сделайте это.
Если вы не можете этого сделать ... ну ... создание статического свойства для хранения ваших значений в классе, которое вы можете отключить несколько экземпляров , по крайней мере, в моя книга - это главный фактор WTF . Если вы не можете исправить это (то есть это слишком хлопотно), просто «сломайте» его ожидаемым образом, чтобы другие люди не споткнулись об этом.
Я бы предпочел синглтон, чем что-то, что создает все проблемы с синглтонами, а также лжет о том, что он является оболочкой для глобальной переменной.
Слепой отказ от шаблонов проектирования из-за того, что вы слышите на Интернет-форумах, что они плохие, - это такой же анти-шаблон, как и одиночные шаблоны в целом. Если инструмент подходит для работы, значит, он правильный.
Посмотрите на свой вопрос, вы пытаетесь эмулировать синглтоны через сложную систему множественного обновления , ради всего святого ... И, чтобы вы знали, создание статического класса по сути превращает его в синглтон, хотя и небезопасный, который можно перезаписать в любой момент.
TL; DR: думайте сами и используйте правильные инструменты; сделайте свой класс конфигурации одноэлементным.
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.