【问题标题】:How does abstract class call get a child value in constructor?抽象类调用如何在构造函数中获取子值?
【发布时间】:2019-05-17 21:29:05
【问题描述】:

我正在尝试在抽象类中使用一个非指定变量,它应该由子类实现。

我尝试了抽象方法,但没有成功。

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()

【问题讨论】:

    标签: php abstract-class


    【解决方案1】:

    您正在使用 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-09
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 2017-08-16
      相关资源
      最近更新 更多