Php 如何强制派生类包含静态属性?
如何强制执行派生类应包含某些静态属性或值的规则 在这个例子中,我希望确保每个扩展父类的类都应该包含一个静态变量$fooPhp 如何强制派生类包含静态属性?,php,Php,如何强制执行派生类应包含某些静态属性或值的规则 在这个例子中,我希望确保每个扩展父类的类都应该包含一个静态变量$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)
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;
}
您不能
抽象
类属性,但是在这种情况下,最好执行以下操作:
abstract class Parent{
abstract public function getFoo();
}
class Child extends Parent{
private $foo = 0;
public function getFoo(){
return $this->foo;
}
}
作为一个额外的提示,您需要知道将来您在哪里获得了类($this):$foo,这是不必要的,您可以只做
静态::$foo
,其工作原理相同。您不能抽象
类属性,但是在这种情况下,可能最好执行以下操作:
abstract class Parent{
abstract public function getFoo();
}
class Child extends Parent{
private $foo = 0;
public function getFoo(){
return $this->foo;
}
}
作为一个额外的提示,您需要知道将来您在哪里获得了课程($this):$foo,这是不必要的,您可以只做
静态::$foo
,这同样有效。您不能。为什么不让它成为一个抽象的方法,让孩子们按照他们想要的方式来实现它,而不是将它限制为一个静态值呢?谢谢。与在每个子类中重新定义getFoo()方法相比,抽象类中只包含一个getFoo()方法的定义似乎更为简单。如果您要强制您的子类实现某些东西,那么强制他们实现静态属性还是方法就无关紧要了。您不能。为什么不让它成为一个抽象的方法,让孩子们按照他们想要的方式来实现它,而不是将它限制为一个静态值呢?谢谢。在抽象类中只包含一个getFoo()方法的定义似乎比在每个子类中重新定义它更简单。如果您要强制您的孩子实现某些东西,那么强制他们实现静态属性还是方法就无关紧要了。