Лучший способ обеспечить статичность в PHP? - PullRequest
2 голосов
/ 25 августа 2011

У меня есть этот Config -класс, который я использую в своем приложении PHP5 для загрузки и анализа моей статической конфигурации.До сих пор мне удавалось не допускать, чтобы класс был синглтоном / реестром, и вместо этого передавал экземпляр класса Config туда, где это необходимо, с помощью внедрения зависимости.

Но теперь, когда мне нужно установить / внести изменения в мой Config во время выполнения в одном месте, мои изменения не отражаются глобально и находятся далеко от специалиста с использованием модификатора static вPHP, мне нужно спросить:

Каков наилучший способ обеспечить, чтобы изменения в свойствах моего Config -класса отражались во всем приложении, не превращая класс в одноэлементный?Могу ли я просто сделать переменную, содержащую данные конфигурации static?

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

На данный момент мне удалось не допустить, чтобы класс был одноэлементным / реестром, и вместо этого передал экземпляр класса Config туда, где он необходим, с помощью внедрения зависимости.

Если вы передаете один и тот же экземпляр вашего класса Config в каждую часть вашего приложения и изменяете настройку, он должен отражаться повсюду.

В случае, если вы создаете несколько объектов класса (и каждый раз анализируете этот файл конфигурации ?!), вы можете прекратить это делать. Возможно, это расточительно, и я бы сказал, что это сбивает с толку.

Так что, если вы create only one и передадите это, все будет хорошо.


В предположении, что вы создаете несколько экземпляров объекта, которые должны существовать только один раз:

Если вы можете «исправить» свою архитектуру, чтобы позволить вам сделать это: Сделайте это.

Если вы не можете к этому ... ну ... создание статического свойства для хранения ваших значений в классе, который вы можете иметь в нескольких экземплярах , это, по крайней мере, в моей книге главный фактор массы тела . Если вы не можете починить (то есть сделать это очень сложно), просто «сломайте» его ожидаемым образом, чтобы другие люди не споткнулись о него.

Я бы предпочел иметь синглтон, чем что-то, что создает все проблемы с синглетами, а также заключается в том, чтобы быть оберткой для глобальной переменной.

1 голос
/ 25 августа 2011

Слепое избегание шаблонов проектирования, потому что вы слышите на интернет-форумах, что они плохие, является примерно таким же антишаблоном, как и одиночные игры в целом.Если инструмент подходит для работы, значит, он прав.

Посмотрите на свой вопрос, вы пытаетесь эмулировать одиночные игры через сложную систему многократного обновления , ради Бога ...И, как вы знаете, создание статического класса по сути превращает его в одноэлементный, хотя и небезопасный, который может быть перезаписан в любое время.

TL; DR: Думайте сами и используйте правильные инструменты;сделайте ваш класс конфигурации синглтоном.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...