PHP Override扩展类方法从静态扩展到非静态

时间:2019-06-15 05:31:45

标签: php

我有一个包含静态方法的类“ A”。现在,我想要该类的副本(无论是否通过扩展),除了我需要该静态方法在新类中变为非静态。

任何想法都欢迎。预先感谢。

我尝试扩展,但是在将该方法重新声明为非静态方法时出现错误:

class A {
  protected $key = null;

  static function methodX($args) {
    // ...
  }
}

class B extends A {
  protected $key = "key";

  public function methodX($args) {
    // ...
    return $this->key;
  }
}

2 个答案:

答案 0 :(得分:-1)

  1. 覆盖的实际风格与对象相关联。覆盖是指将子类对象传递给父类引用变量,但静态方法与类相关联,而它们未与对象链接,因此我们无法覆盖静态方法

  2. 这里的答案是否定的。是什么原因?好吧,因为类的非静态成员变量始终属于一个对象,这意味着每个对象都有其自己的非静态成员变量(也称为实例变量)的个人副本。而且,静态函数没有对象可使用,因为它们属于整个类。请记住,您可以在没有对象的情况下调用静态函数–正是由于这个原因,静态函数无法调用实例变量。

  3. 您只能将静态方法覆盖为静态方法。

答案 1 :(得分:-1)

但是不能,您必须将其重写为静态值,或者为孩子中的非静态创建新函数。