Проект, над которым я работаю, требует, чтобы у меня были некоторые объекты, включая диспетчер конфигурации событий (только для чтения) и диспетчер подключаемых модулей, которые доступны повсюду в системе.Каков предпочтительный способ доступа к объекту в PHP?
Я использовал глобальные переменные для них, пока кто-то (с фоном C++) не заметил, что «вы, вероятно, делаете что-то неправильно, если вам нужны глобальные переменные».
Он предложил использовать объект состояния, который передается всем функциям, которые в нем нуждаются.
Так что я сделал:
$state = new State();
$state->register('eventManager' , new EventManager());
$state->register('configManager', new ConfigManager());
$state->register('cacheManager' , new CacheManager());
$state->register('pluginManager', new PluginManager());
$state->get('pluginManager')->initialize($state);
В то время как я могу видеть преимущество этого метода в более сохраняющих состояние языков, кажется, вроде бессмысленно мне в (в основном?) Лица без языка, как PHP, где теряется состояние после страницы делается загрузка.
Есть ли какая-либо польза для передачи объекта состояния вокруг (в основном) безгосударственного языка, такого как PHP, имеет ли он какие-либо преимущества по сравнению с другими подходами (т. Е. На основе глобальной системы) и есть ли лучшие способы справиться с этим?
Многие хорошие вопросы порождают определенное мнение, основанное на опыте экспертов, но ответы на этот вопрос будут иметь тенденцию почти полностью основываться на мнениях, а не на фактах, ссылках или конкретном опыте. Возможно, вы захотите найти форум для разработки (возможно, [quora] (http://www.quora.com/Computer-Programming)?), Чтобы разобраться в общих чертах. Затем, когда/если у вас есть особые проблемы с кодированием, вернитесь в StackOverflow, и мы будем рады помочь. –
Что вы хотите - это инъекция зависимостей *, а ваш «объект состояния» здесь является чем-то вроде первого удара в контейнере инъекции зависимостей. Независимо от того, имеет ли что-либо состояние состояние или нет, дело не только в отношении * кодовых отношений *. И это полезно на любом языке. – deceze
Кроме того, PHP не является «без гражданства». Он чаще всего используется на веб-сервере для обработки запросов без учета состояния; но может быть так же легко использоваться в очень «stateful» способе. – deceze