php - 抽象类是否有可能强制其子级在 PHP 中拥有构造函数?

标签 php oop constructor abstract-class

我想做这样的事情:

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 :

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

是否有另一种方法来确保子类具有构造函数?

最佳答案

简而言之,没有。不能通过 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';
    }
}

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

关于php - 抽象类是否有可能强制其子级在 PHP 中拥有构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11166458/

相关文章:

php - 根据星期几进行不同的选择查询? - MySQL

java - 创建匿名类的对象

oop - 大类重构规则

php - 通过 Composer 学说mongodb安装错误

php - 更新查询以反射(reflect)规范化数据库

php - 如何在 zf2 的 Controller 中执行查询

Javascript - 对象不是构造函数

php - OOP PhP 类的空属性问题,当它们插入数据库时​​它们不为空。数据库

java - java中父类(super class)和子类之间的构造函数

python - 如果 YAML 中存在 '!',如何使用 PyYAML 解析 YAML