2

我有一个名为Error我自动加载的自定义类。在我的自定义类中,我有一个构造函数和一个像这样的单例 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;
    }
    //...
}

在我的主包含中,我总是在核心逻辑之前准备了这个自定义类的单例:

$Error = Error::getError();

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

致命错误:未捕获的错误:调用未定义的方法 Error::getError()

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

$Error = new Error();

除非我实例化了这个类,否则我不能以某种方式调用静态类函数。如果这真的是 php7 的变化,这将打破我的许多其他逻辑。

4

1 回答 1

1

从 PHP 7 开始,PHP 包含一个Error似乎与您的应用程序的类冲突的内置Error类。

PHP预定义Error

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

您可以通过向应用程序添加自定义namespace来解决此问题,无论如何这是推荐的做法。或者,如果您的应用程序不需要继续在 PHP 5.x 下运行,请考虑将其重构为使用内置Error类功能。

于 2017-10-08T14:45:23.927 回答