我有一个包含静态方法的类“ A”。现在,我想要该类的副本(无论是否通过扩展),除了我需要该静态方法在新类中变为非静态。
任何想法都欢迎。预先感谢。
我尝试扩展,但是在将该方法重新声明为非静态方法时出现错误:
class A {
protected $key = null;
static function methodX($args) {
// ...
}
}
class B extends A {
protected $key = "key";
public function methodX($args) {
// ...
return $this->key;
}
}
答案 0 :(得分:-1)
覆盖的实际风格与对象相关联。覆盖是指将子类对象传递给父类引用变量,但静态方法与类相关联,而它们未与对象链接,因此我们无法覆盖静态方法
这里的答案是否定的。是什么原因?好吧,因为类的非静态成员变量始终属于一个对象,这意味着每个对象都有其自己的非静态成员变量(也称为实例变量)的个人副本。而且,静态函数没有对象可使用,因为它们属于整个类。请记住,您可以在没有对象的情况下调用静态函数–正是由于这个原因,静态函数无法调用实例变量。
您只能将静态方法覆盖为静态方法。
答案 1 :(得分:-1)
但是不能,您必须将其重写为静态值,或者为孩子中的非静态创建新函数。