この質問は昨日の質問と強く関連しています。
私が達成したいこと: この方法でプラグインにアクセスできる php の 1 つの完全にオブジェクト指向のプラグイン システム:
$plugins->testplugin->dosomethingcool();
私が得たもの: いくつかの助けを借りて、最初の基本的な問題を解決することができました. 私が考えた最初の問題は、この構造では、存在しないプラグインが致命的なエラーでシステム全体を吹き飛ばしてしまうことでした。したがって、これらのエラーを処理する必要があります。実際、私はこのクラスを持っています:
<?php
class pluginmanager {
// Simplyfied everything here...
// Basically this class catches the fatal error for calling an object, that has not been defined
public function __get($name) {
if (!isset($this->$name)) {
try{
throw new Exception(...);
}
catch(Exception $e){
// Do something with the exception
}
// Make sure to handle a "Call to member function a non-object"-error.
// The object beneath will use __call() for the error catch.
$this->$name= new DummyPlugin();
}
return $this->$name;
}
}
?>
今まではこれでうまくいき、オブジェクト ベースのプラグイン マネージャーを使用できるようになりました。たとえば、可能なプラグイン「ブログ」は他のプラグイン「データベースレイヤー」を使用する必要があることに気付きました。これを可能にする方法はありますか?
私はすでに考えました:
- plugin-object をグローバルに利用できるようにします。2 つの懸念事項 - 1) 悪い習慣 (理由がないわけではありません...) と 2) あまり安全ではなく、パフォーマンス指向です。
- プラグインがサブプラグインを呼び出すようにします。これは本当にパフォーマンス キルですが、うまくいくのでしょうか?
- hooking-system またはそれ以外: 甘くない... ;-)
すべてのプラグインがロードされた後に依存関係チェックを行い、各プラグインに依存するすべてのプラグインの参照を与えることはできませんか? この参照は完全なコピーでしょうか、それとも言葉の意味での参照のままでしょうか?
ご感想ありがとうございます!