Обычно я использую E_ALL
чтобы увидеть что-нибудь, что PHP может сказать о моем коде, чтобы попытаться его улучшить.
Я просто заметил постоянную погрешности E_STRICT
, но никогда не использовал или не слышал об этом, это хорошая настройка для разработки? В руководстве написано:
Уведомления о времени выполнения. Включите, чтобы PHP предлагал изменения в вашем коде, что обеспечит лучшую совместимость и передовую совместимость вашего кода.
Поэтому мне интересно, если я использую лучший уровень error_reporting
с E_ALL
или это будет лучше всего с E_STRICT
? Или есть какая-то другая комбинация, которую мне еще предстоит изучить?
В 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
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
может помочь вашему коду продолжить работу в отдаленном будущем, но, вероятно, это E_STRICT
для повседневного использования. В E_STRICT
есть две важные вещи:
E_STRICT
генерируются во время компиляции, а не во время выполнения. Если вы увеличиваете уровень ошибок до E_ALL
в своем коде (а не через php.ini ), вы никогда не увидите ошибок E_STRICT
. E_STRICT
содержится в E_ALL
под PHP 6, но не под PHP 5. Если вы обновите свой сервер до PHP6 и настроите E_ALL
как описано в № 1 выше, вы начнете видеть ошибки E_STRICT
без каких-либо дополнительных изменений с вашей стороны. Не строго говоря об ошибке_репортаж, я настоятельно рекомендую использовать любую среду IDE, которая автоматически отображает ошибки синтаксического анализа и общие сбои (например, назначение в состоянии).
В Zend Studio для Eclipse эта функция включена по умолчанию, и с тех пор, как я начал ее использовать, она очень помогала мне в обнаружении ошибок до их появления.
Например, у меня была эта часть кода, в которой я кэшировал некоторые данные в переменной $GLOBALS
, но я случайно написал $_GLOBALS
. Данные никогда не зацикливались, и я никогда не знал, если Зенд не скажет мне: «Эй, это $_GLOBALS
появляется только один раз, это может быть ошибка».
ini_set ( "display_errors", "2"); Error_reporting (E_ALL);