PHP7: 静态 class 函数不能 called/seen 直到 class 被实例化

PHP7: Static class function can't be called/seen until class is instanced

我有一个名为 Error 的自定义 class,我会先自动加载它。在我的自定义 class 中,我有一个构造函数和一个单例 Get 函数,如下所示:

class Error
{
    // Singleton object. Leave $me alone.
    private static $me;

    public $errors; // Array of errors
    public $style;  // CSS rules to apply to error elements

    private function __construct($style = "border:1px solid red;")
    {
        $this->errors = array();
        $this->style = $style;          
    }

    // Get Singleton object
    public static function getError()
    {
        if(is_null(self::$me))
            self::$me = new Error();

        return self::$me;
    }
    //...
}

在我的master include中,我一直在核心逻辑之前准备一个这个自定义的单例class:

$Error = Error::getError();

但是,在 PHP 7 中,这现在给我一个错误:

Fatal error: Uncaught Error: Call to undefined method Error::getError()

你能帮我理解为什么这不再起作用了吗?我试过这个来检查错误 class 是否正在加载,它确实有效(并调用构造函数):

$Error = new Error();

我无法调用静态 class 函数,除非我实例化了这个 class。如果 php7.

确实发生了变化,这将打破我的许多其他逻辑

从 PHP 7 开始,PHP 包含一个内置的 Error class,它似乎与您的应用程序的 Error class.

PHP pre-defined Error class

如果您自己的应用程序的 class 未在自定义命名空间中定义,并且您试图调用 Error::getError(),PHP 将假设您指的是内置 class 没有定义 getError() 方法。 (它确实有一个类似的 getMessage() 非静态方法)。

您可以通过 adding a custom namespace 对您的应用程序解决这个问题,无论如何这是推荐的做法。或者,如果您的应用程序不需要在 PHP 5.x 下继续 运行,请考虑重构它以使用内置的 Error class 功能。