クラス間のコミュニケーションを行うための良い方法はありますか?
たとえば、私が取り組んでいる CMS があります。メインクラスでは、2 つの新しいクラスThemeManagerとModuleManagerをインスタンス化します。ここで、テーマ マネージャーがモジュール マネージャーにアクセスできるようにして、ロードされたモジュールを読み取ってそのコンテンツをページに出力できるようにする必要があります。
これでよろしいですか?これら 2 つのクラスをメインクラスのパブリック プロパティにします。これにより、双方向通信が可能になります (この状況では必ずしも必要ではありません)。
class MainClass {
public $ThemeManager;
public $ModuleManager;
..........
function instantiate_managers() {
$this->ThemeManager = new ThemeManager($this);
$this->ModuleManager = new ModuleManager($this);
}
}
それともこのほうがいいですか?一方向の通信は私の目的には問題ないので、既にインスタンス化されているものを別のものに渡します。
class MainClass {
private $ThemeManager;
private $ModuleManager;
..........
function instantiate_managers() {
$this->ModuleManager = new ModuleManager();
$this->ThemeManager = new ThemeManager($this->ModuleManager);
}
}
どちらの方法でも、これらの参照をModuleクラスとTheme -> Layoutクラスにさらに渡す必要があることに注意してください。
いずれにしてもインスタンス化されるのは 1 回だけであり、それぞれの__構造を介して参照を渡す手間が省けるため、グローバル スコープでThemeManagerとModuleManagerを宣言する方がよいでしょうか? これは OOP の悪い習慣であり、回避しようとしているところをどこかで読んだことがありますが、このような状況では、これが最もハッキリしない方法のようです。
私が考えていないコミュニケーションを処理するための4番目の良い方法はありますか?
答え
最も自然に感じられ、両方の回答で提案されたので、依存性注入方法にPimpleを使用することになりました。