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

Это вопрос, характерный для 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;
}

1

Решение

Просто измените тип вашего метода, добавьте 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;
}
3

Другие решения

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

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

сообщение об ошибке (E_ALL ^ ​​E_STRICT);

Или это в htaccess:

php_value error_reporting 30711

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

0

По вопросам рекламы [email protected]