如何解决“非静态方法xxx:xxx()不应该在PHP 5.4中静态调用?

2022-08-30 14:09:23

目前在PHP中使用大型平台。

托管它的服务器最近已升级到 PHP 5.4。

从那以后,我收到了许多错误消息,例如:

[2012年5月26日,星期六,19:04:41][错误]PHP 严格标准:非静态方法 Config::getData() 不应静态调用,假设从第 35 行的 /xxx/Config.inc.php 中不兼容的上下文中$this

示例方法定义为(注意缺少“静态”关键字):

function &getData() {
            $configData =& Registry::get('configData', true, null);

    if ($configData === null) {
        // Load configuration data only once per request, implicitly
        // sets config data by ref in the registry.
        $configData = Config::reloadData();
    }

    return $configData;
}

这在以前没有引起过问题,我假设错误消息(导致应用程序崩溃)可能与最近升级到PHP5.4有关。

有没有一个PHP设置我可以修改来“忽略”缺少静态关键字?


答案 1

您可以从 中移除,或者如果需要静态调用方法,可以简单地使该方法成为静态方法。据我所知,没有(严格的)方法可以拥有一个可以同时作为静态和非静态方法调用的方法。另外,更令人讨厌的是,您不能有两个同名的方法,一个是静态的,另一个是非静态的。E_STRICTerror_reporting()


答案 2

禁用警报消息不是解决问题的方法。尽管PHP核心仍在继续工作,但它做出了危险的假设和行动。

永远不要忽视PHP应该对某些东西做出假设的错误!!!!

如果类组织为单例,则始终可以使用函数 getInstance(), 然后使用 getData()

Likse:

$classObj = MyClass::getInstance();
$classObj->getData();

如果类不是单例,请使用

 $classObj = new MyClass();
 $classObj->getData();

推荐