E_STRICT сообщения выбрасываются, хотя не установлены - PullRequest
3 голосов
/ 14 января 2011

После обновления моего тестового сервера до PHP 5.3.3 (Debian Squeeze) я столкнулся со странным поведением в отношении сообщений об ошибках в PHP.

Я установил error_reporting так:

error_reporting(E_ALL);

и проверил настройку с помощью

echo error_reporting();

что повторяет 30719. Согласно php.net это означает «Все ошибки и предупреждения, как поддерживается, за исключением уровня E_STRICT.».

Но в самой следующей строке (определение класса abstract class formInputContainer extends formContainer implements formElementValueable { ... }) это приводит к сообщению:

Строгий (2048): объявление formInputContainer :: addElement () должно быть совместимым с объявлением formContainer :: addElement ()

Почему отображается сообщение E_STRICT, хотя оно не установлено? Даже переход на E_ALL & ~ E_STRICT не помогает.

Ответы [ 2 ]

5 голосов
/ 14 января 2011

Причина, по которой вы видите их, даже если они не установлены, заключается в том, что они генерируются во время компиляции (ну, во время разбора). Это означает, что ошибки срабатывают до того, как ваш error_reporting() вызов будет сделан. Реальное исправление состоит в том, чтобы изменить настройку php.ini, чтобы удалить E_STRICT из определения. Чтобы убедиться, что вы редактируете правильный файл, отметьте phpinfo().

4 голосов
/ 14 января 2011

Если это пользовательский обработчик ошибок (устанавливается через set_error_handler()), вам придется самостоятельно проверить текущий уровень error_reporting. Пользовательский обработчик ошибок получает все сообщения об ошибках:

Руководство говорит:

Важно помнить, что стандартный обработчик ошибок PHP полностью игнорируется для типов ошибок, указанных в error_types, если только функция обратного вызова не возвращает FALSE. error_reporting() настройки не окажут никакого влияния, и ваш обработчик ошибок будет вызван независимо - однако вы все еще можете прочитать текущее значение error_reporting и действовать соответствующим образом.

...