В настоящее время используется большая платформа в PHP.
Сервер, на котором он размещен, недавно был обновлен до PHP 5.4.
Поскольку, я получил много сообщений об ошибках, таких как:
[Сб 26 мая 19:04:41 2012] [ошибка] PHP Строгие стандарты: нестатический метод Config :: getData () не следует вызывать статически, предполагая $ this из несовместимого контекста в /xxx/Config.inc.php on строка 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, который я могу изменить, чтобы «игнорировать» отсутствие статического ключевого слова?
Вы можете либо удалить E_STRICT
из error_reporting()
, либо просто сделать свой метод статическим, если вам нужно называть его статически. Насколько я знаю, нет (строгого) способа иметь метод, который можно вызвать как статический, так и нестатический. Кроме того, что более раздражает, вы не можете иметь два метода с тем же именем, один из которых является статичным, а другой – нестатическим.
Отключение предупреждающего сообщения не является способом решения проблемы. Несмотря на то, что ядро PHP продолжает работать, оно создает опасные предположения и действия.
Никогда не игнорируйте ошибку, когда PHP должен делать какие-то предположения !!!!
Если класс, организованный как singleton, вы всегда можете использовать функцию getInstance (), а затем использовать getData ()
Likse:
$classObj = MyClass::getInstance(); $classObj->getData();
Если класс не является одиночным, используйте
$classObj = new MyClass(); $classObj->getData();
Я не предлагаю вам просто избегать строгих ошибок в вашем проекте. Intead, вы должны превратить свой метод в static или попытаться создать новый экземпляр объекта:
$var = new YourClass(); $var->method();
Вы также можете использовать новый способ сделать то же самое с PHP 5.4:
(new YourClass)->method();
Надеюсь, это поможет!
Я решил это с помощью одной строки кода, а именно: В файле index.php, в корне вашего шаблона, после этой строки кода:
('_JEXEC') или die ('Ограниченный доступ');
вставьте эту строку: ini_set ('display_errors', 'Off');
Не волнуйся, будь счастлив …
отправлено Jenio.