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

В настоящее время используется большая платформа на PHP.

Сервер, на котором он размещен, недавно был обновлен до PHP 5.4.

Так как я получил много сообщений об ошибках, таких как:

[Sat May 26 19:04:41 2012] [error] PHP Strict Standards: Non-static method Config::getData() should not be called statically, assuming $this from incompatible context in /xxx/Config.inc.php on line 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, которую я могу изменить на «игнорировать»? отсутствие статического ключевого слова?

Ответы на вопрос(4)

Я не предлагаю вам просто скрывать ошибки в вашем проекте. Intead, вы должны превратить ваш метод в static или попытаться создать новый экземпляр объекта:

$var = new YourClass();
$var->method();

Вы также можете использовать новый способ сделать то же самое с PHP 5.4:

(new YourClass)->method();

Я надеюсь, что это поможет вам!

Отключение предупреждающего сообщения не является способом решения проблемы. Несмотря на то, что ядро PHP продолжает работать, оно делает опасные предположения и действия.

Never ignore the error where PHP should make an assumptions of something!!!!

If the class организованный как одиночка, вы всегда можете использовать функцию getInstance (), а затем использовать getData ()

Likse:

$classObj = MyClass::getInstance();
$classObj->getData();

Если класс не одиночный, используйте

 $classObj = new MyClass();
 $classObj->getData();

Я решил это одной строкой кода, как показано ниже: В файле index.php, в корневом каталоге вашего шаблона, после этой строки кода:

определен («_JEXEC») или умер («ограниченный доступ»);

вставьте эту строку: ini_set («display_errors», «Off»);

Не волнуйся, будь счастлив ...

опубликовано Jenio.

Решение Вопроса

Вы можете удалитьE_STRICT отerror_reporting(), или вы можете просто сделать ваш метод статическим, если вам нужно вызывать его статически. Насколько я знаю, нет (строгого) способа иметь метод, который можно вызывать как статический, так и нестатический метод. Кроме того, что более раздражает, вы не можете иметь два метода с одинаковым именем, один из которых является статическим, а другой - нестатичным.

Ваш ответ на вопрос