PHP将扩展类方法从静态重写为非静态

PHP将扩展类方法从静态重写为非静态,php,Php,我有一个包含静态方法的类a。现在我想要一个该类的副本,不管是否通过扩展,除了我需要该静态方法在新类中变为非静态之外 欢迎提出任何意见。提前谢谢 我尝试扩展,但在将该方法重新声明为非静态时,出现了一个错误: class A { protected $key = null; static function methodX($args) { // ... } } class B extends A { protected $key = "key"; public fu

我有一个包含静态方法的类a。现在我想要一个该类的副本,不管是否通过扩展,除了我需要该静态方法在新类中变为非静态之外

欢迎提出任何意见。提前谢谢

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

class A {
  protected $key = null;

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

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

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

重写的实际风格与对象相链接。重写是当我们将一个子类对象传递给一个父类引用变量,但静态方法与类关联,它们没有与对象链接,因此我们不能重写静态方法

答案是否定的。原因是什么?因为类的非静态成员变量总是属于一个对象,这意味着每个对象都有自己的非静态成员变量副本,也就是实例变量。而且,静态函数没有对象可以使用,因为它们作为一个整体属于类。请记住,您可以在没有对象的情况下调用静态函数——正是因为这个原因,静态函数不能调用实例变量

只能将静态方法重写为静态方法


但是你不能这样做,你必须在你的孩子身上重写它为静态的或者为非静态的创建一个新的函数