Каков рекомендуемый параметр 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
иметь в виду:
- Согласно инструкции, большинство
E_STRICT
ошибки генерируются во время компиляции, а не во время выполнения. Если вы увеличиваете уровень ошибки доE_ALL
в вашем коде (а не через php.ini) вы можете никогда не увидетьE_STRICT
ошибки в любом случае. E_STRICT
содержится вE_ALL
под PHP 6, но не под PHP 5. Если вы обновляете свой сервер до PHP6 и имеетеE_ALL
настроенный как описано в #1 выше, вы начнете видетьE_STRICT
ошибки, не требуя каких-либо дополнительных изменений с вашей стороны.
Не строго говоря об error_reporting, я настоятельно рекомендую использовать любую IDE, которая автоматически показывает ошибки синтаксического анализа и общие сбои (например, назначение в условии).
В Zend Studio для Eclipse эта функция включена по умолчанию, и с тех пор, как я начал ее использовать, она очень помогает мне в обнаружении ошибок до их возникновения.
Например, у меня был этот кусок кода, где я кэшировал некоторые данные в $GLOBALS
переменная, но я случайно написал $_GLOBALS
вместо. Данные никогда не кэшировались, и я бы никогда не узнал, если бы Зенд не сказал мне: "Эй, это $_GLOBALS
штука появляется только один раз, это может быть ошибкой ".