抽象类调用如何在构造函数中获取子值?

时间:2019-05-17 21:29:05

标签: php abstract-class

我试图在抽象类中使用非指定变量,该变量应由子类实现。

我尝试了抽象方法,但是没有用。

abstract class AbstractClass {
    protected abstract function foo($data);

    public function __construct($param) {
         self::foo($param);
    }
}

class ConcreteClass extends AbstractClass {
    public $propertie;

    protected function foo($data) {
         $this->propertie = $data;
    }
}

$fa = new ConcreteClass('banana');
echo $fa->propertie;

但这是结果:

  

PHP致命错误:在第7行的文件夹/文件夹/File.php中无法调用抽象方法AbstractClass :: foo()

1 个答案:

答案 0 :(得分:0)

您使用的是self ::,通常是一个类静态方法,并且没有调用父类的构造函数。

尝试一下:

abstract class AbstractClass
{
    protected abstract function foo($data);

    public function __construct($param)
    {
        $this->foo($param); // *** use $this, an instance method
    }
}

class ConcreteClass extends AbstractClass
{
    public $propertie;

    public function __construct($param)
    {
        parent::__construct($param); // ** invoke the parent's constructor
    }

    protected function foo($data)
    {
        $this->propertie = $data;
    }
}