3

これが可能かどうかわからないので、できる限り説明しようと思います。

存在する場合と存在しない場合がある「プラグイン」子クラスによって簡単に拡張できる親クラスが必要です。

class Foo {
__construct(){
   $this->foo = "this is foo";
}
}

class Bar extends Foo {
   function construct(){
    parent :: __construct;
  }
   $this->foo = "foo is now bar";
}

しかし、必要になるたびに $bar = new Bar でクラス Bar を初期化する必要はありません。クラス Foo からの b/c どの子クラスが利用可能かわかりません..そして理想的にはそれをしたいと思いますスケールなので問題ありません。新しい Foo の呼び出しがあるたびに、子クラスが自動的に初期化されるようにしたいと思います。

これは可能ですか...子クラスを使用して親クラスのすべてのインスタンスで変数を変更できるようにするためのより良い方法はありますか?? 私はWordPress内で作業しているので、Fooクラスに子クラスがフックできるアクションフックを与えることができると思いますが、これを達成するための自然なPHPの方法があるかどうか疑問に思っています.

4

2 に答える 2

3

あなたが提供した情報を考えると、実装を実際に編集できない場合は、Fooほとんど運が悪いと思います。

継承はBar、インスタンス化されたクラスである必要があり、ではないため、機能しませんFoo。他のコードがタイプの新しいオブジェクトを作成するときに、そのFoo機能を黙って使用することはできません。BarFoo

Wordpressに関連しているとおっしゃっていれば、プラグイン開発者にinitプロセスにフックを追加して機能を拡張できるように依頼することができます。これは基本的に、Wordpressがサードパーティのコードでコードを拡張できるようにする方法です。

于 2012-07-22T15:40:36.257 に答える
0

これは、Zend のようなフレームワークとして実行できます。

すべての子クラスをフォルダーに入れ、プラグインフォルダーと言って、クラス名と同じファイルに名前を付けます。class Bar {}プラグインフォルダのBar.phpに入れるのと同じように

Bar.phpで

class Bar extends Foo {
   function construct(){
    parent :: __construct;
  }
   $this->foo = "foo is now bar";
}

そしてクラスFooは

class Foo {
__construct(){

foreach (glob("plugins/*.php") as $filename) // will get all .php files within plugin directory
  {
    include $filename;
    $temp = explode('/',$filename);
    $class_name = str_replace('.php',$temp[count($temp)-1]); // get the class name 
    $this->$class_name = new $class_name;   // initiating all plugins
  }


}
}

$foo = new Foo();
echo $foo->bar->foo;  //foo is now bar

よろしくお願いします

于 2012-07-23T10:48:30.390 に答える