私が取り組んでいるプロジェクトでは、システムのどこでも利用可能なイベントマネージャー(読み取り専用)構成マネージャーとプラグインマネージャーを含むいくつかのオブジェクトが必要です。オブジェクトを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に戻ってください。お手伝いします。 –
あなたがしたいのは* dependency injection *です。ここでのあなたの "state object"は、依存性注入コンテナの最初のスタブのようなものです。ここに何かが状態を持っているかどうかにかかわらず、それはすべて*管理コード関係*です。それはあらゆる言語で有用です。 – deceze
また、PHPは「ステートレス」ではありません。これは、ステートレスな要求を処理するためにWebサーバーで最もよく使用されます。代わりに非常に「ステートフル」な方法で簡単に使用することができます。 – deceze