Intereting Posts

Как я могу решить «Нестатический метод xxx: xxx () не следует называть статическим в PHP 5.4?

В настоящее время используется большая платформа в 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.