严格标准:不应静态调用非静态方法,假设$ this来自不兼容的上下文

时间:2015-05-27 15:17:07

标签: php static standards strict non-static

这是我们接管的自定义写入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;     
}

2 个答案:

答案 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()函数添加静态来修复,但这可能会影响脚本的其他部分(可能会非静态地调用它)。