Это вопрос, характерный для 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;
}
Просто измените тип вашего метода, добавьте 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;
}
PHP 5.4 поставляется с уведомлениями о строгих стандартах, активными по умолчанию, уведомлениями, которые по умолчанию отключены в 5.3 и, вероятно, были проигнорированы (потому что большинство людей, как правило, делают это, даже если это плохая практика).
Чтобы быстро решить проблему, отключите их (вы можете использовать это):
сообщение об ошибке (E_ALL ^ E_STRICT);
Или это в htaccess:
php_value error_reporting 30711
Тем не менее, я настоятельно рекомендую вам исправить их по одному. Тот, который вы укажете, можно исправить, добавив static в функцию getMapper (), но это может повлиять на другие части ваших скриптов (где он может вызываться не статически).