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

How does abstract class call get a child value in constructor?

我正在尝试使用一个抽象的 class 一个非指定变量,它应该由 child 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 Fatal error: Cannot call abstract method AbstractClass::foo() in folder/folder/File.php on line 7

您正在使用 self:: ,通常是 class 静态方法,并且没有调用父 class 构造函数。

试试这个:

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;
    }
}