Строгие стандарты: Нестатический метод не должен вызываться статически, предполагая $ this из несовместимого контекста

1

Это вопрос, связанный с заказной 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')));

Может ли кто-нибудь сообщить, что может пойти не так?

Благодаря :)

edit: добавление getMapper()

    public function getMapper()
{
   if (null === self::$__mapper) {
      self::setMapper(new Vox_Model_Setting_Mapper());
   }
   return self::$__mapper;     
}
  • 0
    Проверьте getMapper() функции getMapper() . Ошибка говорит, что это не static и вы называете это статическим способом. Вы должны создать object класса Vox_Model_Setting до вызова его нестатических методов
  • 0
    Привет! Это открытая функция getMapper () getMapper () {if (null === self :: $ __ mapper) {self :: setMapper (new Vox_Model_Setting_Mapper ()); } return self :: $ __ mapper; }
Теги:
static
standards
strict
non-static

2 ответа

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;    
}
0

PHP 5.4 поставляется со строковыми стандартными уведомлениями, активными по умолчанию, уведомлениями, которые по умолчанию отключены в 5.3, и, вероятно, были проигнорированы (поскольку большинство ppl имеют тенденцию делать это, хотя это плохая практика).

Чтобы быстро устранить проблему, отключите их (вы можете использовать это):

error_reporting (E_ALL ^ E_STRICT);

Или это в htaccess:

php_value error_reporting 30711

Тем не менее, я настоятельно рекомендую вам исправить их один за другим. То, что вы указываете там, можно устранить, добавив статическую функцию getMapper(), но это может затронуть другие части ваших скриптов (там, где их можно назвать не статически).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню