我试图在抽象类中使用非指定变量,该变量应由子类实现。
我尝试了抽象方法,但是没有用。
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()
答案 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;
}
}