如何强制执行派生类应包含某些静态属性或值的规则?
在这个例子中,我希望确保每个扩展Parent的类都应该包含一个静态变量$ foo
abstract class Parent{
// Trying to enforce that all derived classes must contain a static $foo;
static protected $foo;
public function getFoo(){
return get_class($this)::$foo;
}
}
class Child extends Parent{
static protected $foo = 0;
}
答案 0 :(得分:4)
你不能abstract
一个类属性但是在这种情况下,最好做以下事情:
abstract class Parent{
abstract public function getFoo();
}
class Child extends Parent{
private $foo = 0;
public function getFoo(){
return $this->foo;
}
}
作为一个额外的注意事项,您将来知道get_class($this)::$foo
这是不必要的,您可以static::$foo
执行相同的工作。