0

我有一个由大约十个子类继承的基类。这些子类中的大多数具有非常相似的行为,但我只想为其中三个定义专门的方法。

是否可以通过每次实例化子类的对象时自动加载父类来伪装这些类的存在?这样我就不必使用相同的代码定义多个类?

例如

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();

...并且只有一个文件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

您必须将逻辑添加到__autoload()函数或spl_autoload_register(),它通过字符串比较决定要加载的文件/如果它可能是您父母的孩子之一。

于 2010-09-20T23:42:08.753 回答
0

在我看来,维护每个文件一个类的约定是有益的。它使自动加载器保持简单,促进各个类的重用,最重要的是,使源代码更易于导航和推理。如果您有许多具有共同父类的类,请考虑将它们移动到单独的子目录并将此目录添加到自动加载器。

对于 PHP 以外的具有更好导入语义的语言,这不一定是正确的。

于 2010-09-20T23:58:01.113 回答