php - 在 php 中扩展静态方法

标签 php static

class Foo {
  public static function foobar() {
    self::whereami();
  }

  protected static function whereami() {
    echo 'foo';
  }
}

class Bar extends Foo {
  protected static function whereami() {
    echo 'bar';
  } 
}

Foo::foobar();
Bar::foobar();

预期结果 foobar 实际结果 foofoo

更糟糕的是,服务器仅限于 php 5.2

最佳答案

您只需要一言以蔽之!

问题在于你调用whereami()的方式,而不是self::你应该使用static::。所以类 Foo 应该是这样的:

class Foo {
  public static function foobar() {
    static::whereami();
  }
  protected static function whereami() {
    echo 'foo';
  }
}

换句话说,“静态”实际上使对 whereami() 的调用是动态的 :) - 这取决于调用所在的类。

关于php - 在 php 中扩展静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5853310/

相关文章:

多次调用的 C++ 静态成员析构函数

javascript - php中onclick后的mySQL请求

php - 一个 Laravel 4 安装的多个应用程序/项目

javascript - 表单验证 Bootstrap 4

php - "Better"这个怎么写?

c++ - 静态函数常量静态成员函数

java - 如何使用 Java 7 阻止/批量重置静态变量

C数组内存分配

java - 在 C++ 中的模板参数上调用静态函数

php - DOMDocument XPath 查询以获取类名和标签值