Каков рекомендуемый параметр error_reporting() для разработки? Как насчет E_STRICT?

Обычно я использую E_ALL чтобы увидеть что-нибудь, что PHP может сказать о моем коде, чтобы попытаться улучшить его.

Я только что заметил константу ошибки E_STRICT, но никогда не использовал и не слышал об этом, это хорошая установка для разработки? В руководстве сказано:

Уведомления во время выполнения. Включите, чтобы PHP предлагал изменения в вашем коде, которые обеспечат лучшую совместимость и прямую совместимость вашего кода.

Так что мне интересно, если я использую лучшее error_reporting уровень с E_ALL или это будет вместе с E_STRICT будь лучшим? Или есть еще какая-то комбинация, которую мне еще предстоит выучить?

8 ответов

Решение

В PHP 5 вещи покрыты E_STRICT не покрыты E_ALLТаким образом, чтобы получить больше информации, вам нужно объединить их:

 error_reporting(E_ALL | E_STRICT);

В PHP 5.4 E_STRICT будет включен в E_ALLтак что вы можете использовать только E_ALL,

Вы также можете использовать

error_reporting(-1);

который всегда будет включать все ошибки. Что более семантически правильно, так как:

error_reporting(~0);

Используйте следующее в php.ini:

error_reporting = E_ALL | E_STRICT

Также вам следует установить Xdebug, он может подсвечивать ваши ошибки ослепительными яркими цветами и печатать полезную подробную информацию.

Никогда не допускайте ошибок или уведомлений в вашем коде, даже если это безвредно.

На мой взгляд, чем выше вы установили уровень сообщений об ошибках на этапе разработки, тем лучше.

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

http://php.net/error_reporting

E_ALL | E_STRICT для разработки с PHP до 5.2.0.

5.2 вводит E_RECOVERABLE_ERROR и 5.3 вводит E_DEPRECATED а также E_USER_DEPRECATED, Возможно, вы захотите включить их, если вы используете одну из этих версий.

Если вы хотите использовать магические числа, вы можете просто установить error_reporting значение некоторого довольно высокого значения 2^n-1 - сказать, 16777215и это действительно просто включит все биты между 1..n, Но я не думаю, что использование магических чисел - хорошая идея...

На мой взгляд, PHP немного упал, имея E_ALL не совсем все. Но, видимо, это будет исправлено в PHP 6...

В более новых версиях PHP E_ALL включает больше классов ошибок. Начиная с PHP 5.3, E_ALL включает в себя все, кроме E_STRICT. В PHP 6 он, как утверждается, будет включать даже это. Это хороший совет: лучше видеть больше сообщений об ошибках, чем меньше.

То, что включено в E_ALL, описано на странице предопределенных констант PHP в онлайн-руководстве.

Лично я думаю, что это не имеет большого значения, если вы используете E_STRICT. Это, безусловно, не повредит вам, тем более что это может помешать вам писать скрипты, которые имеют небольшой шанс сломаться в будущих версиях PHP. С другой стороны, в некоторых случаях строгие сообщения могут быть слишком шумными, особенно если вы спешите. Я предлагаю вам включить его по умолчанию и выключить, когда он раздражает.

Вы можете использовать error_reporting = -1
Он всегда будет состоять из всех битов (даже если их нет в E_ALL)

В зависимости от ваших долгосрочных планов поддержки этого кода, отладка с помощью E_STRICT enabled может помочь вашему коду продолжить работу в отдаленном будущем, но это, вероятно, излишне для повседневного использования. Есть две важные вещи о E_STRICT иметь в виду:

  1. Согласно инструкции, большинство E_STRICT ошибки генерируются во время компиляции, а не во время выполнения. Если вы увеличиваете уровень ошибки до E_ALL в вашем коде (а не через php.ini) вы можете никогда не увидеть E_STRICT ошибки в любом случае.
  2. E_STRICT содержится в E_ALL под PHP 6, но не под PHP 5. Если вы обновляете свой сервер до PHP6 и имеете E_ALL настроенный как описано в #1 выше, вы начнете видеть E_STRICT ошибки, не требуя каких-либо дополнительных изменений с вашей стороны.

Не строго говоря об error_reporting, я настоятельно рекомендую использовать любую IDE, которая автоматически показывает ошибки синтаксического анализа и общие сбои (например, назначение в условии).

В Zend Studio для Eclipse эта функция включена по умолчанию, и с тех пор, как я начал ее использовать, она очень помогает мне в обнаружении ошибок до их возникновения.

Например, у меня был этот кусок кода, где я кэшировал некоторые данные в $GLOBALS переменная, но я случайно написал $_GLOBALS вместо. Данные никогда не кэшировались, и я бы никогда не узнал, если бы Зенд не сказал мне: "Эй, это $_GLOBALS штука появляется только один раз, это может быть ошибкой ".

ini_set("display_errors","2"); Error_reporting (E_ALL);

Другие вопросы по тегам