Как я могу решить "Нестатический метод 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.