Как я могу решить "Нестатический метод xxx: xxx() не следует называть статическим в PHP 5.4?
В настоящее время используется большая платформа в PHP.
Сервер, на котором он размещался, недавно был обновлен до PHP 5.4.
Так как я получил много сообщений об ошибках, например:
[Сб Май 26 19:04:41 2012] [ошибка] Строгие стандарты PHP: нестатический метод Config:: getData() не следует вызывать статически, предполагая $this из несовместимого контекста в /xxx/Config.inc.php в строке 35
Примерный метод определяется как (обратите внимание на отсутствие ключевого слова static):
function &getData() {
$configData =& Registry::get('configData', true, null);
if ($configData === null) {
// Load configuration data only once per request, implicitly
// sets config data by ref in the registry.
$configData = Config::reloadData();
}
return $configData;
}
Это не вызвало проблемы раньше, и я предполагаю, что сообщения об ошибках (которые приводят к сбою приложения) могут быть связаны с недавним обновлением до PHP5.4.
Есть ли параметр PHP, который я могу изменить, чтобы "игнорировать" отсутствие статического ключевого слова?
Ответы
Ответ 1
Вы можете удалить E_STRICT
из error_reporting()
, или вы можете просто сделать свой метод статическим, если вам нужно его статически ставить. Насколько я знаю, нет (строгого) способа иметь метод, который можно вызвать как статический, так и нестатический. Кроме того, что более раздражает, вы не можете иметь два метода с тем же именем, один из которых является статическим, а другой нестатическим.
Ответ 2
Отключение предупреждающего сообщения не является способом решения проблемы.
Несмотря на то, что ядро PHP продолжает работать, оно создает опасные предположения и действия.
Никогда не игнорируйте ошибку, когда PHP должен делать какие-то предположения!!!!
Если класс организован как одноэлементный, вы всегда можете использовать функцию getInstance(), а затем использовать getData()
Likse:
$classObj = MyClass::getInstance();
$classObj->getData();
Если класс не является одиночным, используйте
$classObj = new MyClass();
$classObj->getData();
Ответ 3
Я не предлагаю вам просто избегать строгих ошибок в вашем проекте.
Intead, вы должны превратить свой метод в static или попытаться создать новый экземпляр объекта:
$var = new YourClass();
$var->method();
Вы также можете использовать новый способ сделать то же самое с PHP 5.4:
(new YourClass)->method();
Надеюсь, это поможет вам!
Ответ 4
Я решил это с помощью одной строки кода, а именно:
В файле index.php, в корне вашего шаблона, после этой строки кода:
определен ('_JEXEC') или умереть ('Ограниченный доступ');
вставьте эту строку:
ini_set ('display_errors', 'Off');
Не волнуйся, будь счастлив...
отправленный Jenio.