0

約10個のサブクラスに継承される基本クラスがあります。これらのサブクラスのほとんどは非常によく似た動作をしますが、そのうちの3つだけに特化したメソッドを定義したいと思います。

子クラスのオブジェクトがインスタンス化されるたびに親クラスを自動ロードすることで、これらのクラスの存在を偽装することは可能ですか?このようにして、同じコードで複数のクラスを定義する必要はありませんか?

例えば

class ParentClass {
    public function __construct() {
        switch(get_class($this)) {
            case "ChildClass1" : do_stuff() break;
            case "ChildClass2" : do_other_stuff() break;
            default: break;
        }
    }
}

$c1 = new ChildClass1();
$c2 = new ChildClass2();

...ファイルは1つだけですParentClass.php(個別のファイルChildClass1.phpChildClass2.php)はありません。

4

3 に答える 3

2

どうしてこんなことをしてみませんか?

class ParentClass {
  public function __construct()
  {
    $this->do_stuff();
  }
}

class SpecializedClass
  extends ParentClass
{
  public function __construct()
  {
    // Optional, do the stuff parent does (do_stuff());
    parent::__construct();
    // ... specialized construction logic here
    $this->do_other_stuff();
  }

  // ... specialized methods here.
}

class NormalClass1
  extends ParentClass
{

}

class SpecialClass1
  extends SpecializedClass
{

}

// ... etc.
于 2010-09-20T23:06:57.420 に答える
0

私の意見では、ファイルごとに 1 つのクラスという規則を維持することは有益です。これにより、オートローダが単純になり、個々のクラスの再利用が容易になり、最も重要なこととして、ソース コードのナビゲートと推論が容易になります。共通の親を持つクラスが多数ある場合は、それらを別のサブディレクトリに移動し、このディレクトリをオートローダーに追加することを検討してください。

これは、より優れたインポート セマンティクスを持つ PHP 以外の言語には必ずしも当てはまりません。

于 2010-09-20T23:58:01.113 に答える
0

__autoload()関数にロジックを追加するかspl_autoload_register()、文字列比較によってロードするファイルを決定するロジックを追加する必要があります/それが親の子の1つである可能性がある場合。

于 2010-09-20T23:42:08.753 に答える