抽象 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;
}
}
我正在尝试使用一个抽象的 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;
}
}