这是我们接管的自定义写入CMS的特定问题。我们移动了服务器,PHP版本从5.3.8变为5.4.1。 从那时起,我们无法使CMS正常运行并收到此错误:
Strict Standards: Non-static method Vox_Model_Setting::getMapper() should not be called statically, assuming $this from incompatible context in /var/www/vhosts/ds8760.dedicated.turbodns.co.uk/eera-bioenergy.com/application/modules/users/models/Role.php on line 71
第71行说:
$settings = new Vox_Model_Setting(Vox_Model_Setting::getMapper()->findOne(array('module' => 'users')));
有人可以告知可能出现的问题吗?
谢谢:)
编辑:添加getMapper()
public function getMapper()
{
if (null === self::$__mapper) {
self::setMapper(new Vox_Model_Setting_Mapper());
}
return self::$__mapper;
}
答案 0 :(得分:3)
只需更改您的方法类型,添加static
关键字并按照您现在的操作进行调用。
public function getMapper() {
if (null === self::$__mapper)
{
self::setMapper(new Vox_Model_Setting_Mapper());
}
return self::$__mapper;
}
到
public static function getMapper() { # see extra static keyword
if (null === self::$__mapper)
{
self::setMapper(new Vox_Model_Setting_Mapper());
}
return self::$__mapper;
}
答案 1 :(得分:0)
PHP 5.4默认情况下会出现严格标准通知,默认情况下会在5.3中关闭,但可能会被忽略(因为大多数人都倾向于这样做,即使这是一种不好的做法)。
要快速解决问题,请将其关闭(您可以使用此功能):
error_reporting(E_ALL ^ E_STRICT);
或者在htaccess:
php_value error_reporting 30711
不过,我强烈建议你逐一修复它们。您在那里指定的那个可以通过向getMapper()函数添加静态来修复,但这可能会影响脚本的其他部分(可能会非静态地调用它)。