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 に答える