0

PHP で優れたプラグイン システムを実装する方法について一生懸命考えています。システムのフックやそのような実装のさまざまな方法について多くのことを読みましたが、今まで自分のニーズに合ったアプローチや既存のシステムを見つけられませんでした。

使用されているすべてのプラグインがサブオブジェクト ($plugin->$blog) として利用できるオブジェクト ($plugins とする) が必要です。これまでのところ、それは問題ありません。しかし、存在しないプラグインをキャッチするにはどうすればよいでしょうか?

コードのどこかで $plugin->$blog->loadArticle などを使用してプラグイン $blog を呼び出し、プラグインがプラグイン システムによって読み込まれなかった場合、致命的なエラーがスローされます。デバッグ クラス内でこれらのエラーをキャッチして処理することは可能ですか?

ご感想ありがとうございます!私の英語を許してください... ;-)

4

3 に答える 3

2

さて、魔法の __get() を使用して、このように Plugin オブジェクトを実装できます。

class Plugins {
   private $plugins = array();

   public function __get($name) {
       if (!isset($this->plugins[$name]) {
          throw new PluginNotInstalledException(); //this can be catched with try / catch
       }
       return $this->plugins[$name];
   }

   ... //methods addPlugin() etc..
}
于 2013-04-24T18:18:58.803 に答える
0

プロパティを設定するときはいつでも$blog、渡されたパラメーターが正しいかどうかを確認し=== NULL、そうである場合は例外をスローするのが良いでしょう。したがって、$plugin->blognull ではないことを確認できます。

プラグインがインターフェイスを実装するか、抽象クラスを継承する必要がある場合は、さらに良いでしょう。したがって、プロパティを設定するときはいつでも、渡されたパラメーターがinstanceofそのクラス/インターフェイスであるかどうかを確認できます。

于 2013-04-24T18:19:09.707 に答える