kae*_*ese 30 php static-methods
目前在PHP中使用大型平台.
它托管的服务器最近已升级到PHP 5.4.
从那以后,我收到了很多错误消息,如:
[Sat 5月26日19:04:41 2012] [错误] PHP严格标准:非静态方法Config :: getData()不应该静态调用,假设$ this来自/xxx/Config.inc.php中的不兼容上下文第35行
示例方法定义为(注意缺少'static'关键字):
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设置我可以修改为"忽略"缺少静态关键字?
lan*_*nzz 42
您可以删除E_STRICT从error_reporting(),或者你可以简单地让你的方法静态的,如果你需要静态调用它.据我所知,没有(严格的)方法可以调用静态和非静态方法.另外,哪个更烦人,你不能有两个同名的方法,一个是静态的,另一个是非静态的.
vol*_*inc 29
禁用警报消息不是解决问题的方法.尽管PHP核心仍在继续工作,但它仍然是一个危险的假设和行动.
永远不要忽视PHP应该做出某些假设的错误!
如果将类组织为单例,则可以始终使用函数getInstance()然后使用getData()
Likse:
$classObj = MyClass::getInstance();
$classObj->getData();
如果该类不是单例,请使用
 $classObj = new MyClass();
 $classObj->getData();
Bru*_*pos 10
我不建议您只是隐藏项目中的严重错误.Intead,你应该把你的方法变成静态或尝试创建一个新的对象实例:
$var = new YourClass();
$var->method();
从PHP 5.4开始,您也可以使用新方法执行相同的操作:
(new YourClass)->method();
我希望它对你有所帮助!