4

我想做这样的事情:

abstract class Foo
{
    public function __construct()
    {
        echo 'This is the parent constructor';
    }

    abstract function __construct();
}

class Bar extends Foo
{
    // constructor is required as this class extends Foo
    public function __construct() 
    {
        //call parent::__construct() if necessary
        echo 'This is the child constructor';
    }
}

但是这样做时我遇到了一个致命错误:

Fatal error: Cannot redeclare Foo::__construct() in Foo.php on line 8

有没有另一种方法来确保子类有一个构造函数?

4

1 回答 1

2

简而言之,没有。非魔法方法可以通过 abstract 关键字声明。

如果要使用构造函数的旧方式,请创建一个与类同名的方法,并将其声明为抽象。这将在类的实例化时调用。

例子:

abstract class Foo
{
    public function __construct()
    {
        echo 'This is the parent constructor';
    }

    abstract function Bar();
}

class Bar extends Foo
{
    // constructor is required as this class extends Foo
    public function Bar() 
    {
        parent::__construct();
        echo 'This is the child constructor';
    }
}

不过,我建议为您的功能使用接口。

于 2012-06-23T03:12:56.570 回答