Недавно я переключился на новую настройку, сообщающую PHP-уведомления; мой код работал нормально, но эти уведомления не были исправлены, но мне интересно, имеет ли смысл исправить каждый из них и оставить их сообщенными или просто игнорировать их и отключать уведомление об уведомлениях.
Что это за разные мнения? Есть ли какие-либо рекомендации, связанные с уведомлениями?
Ошибки – это ошибки. Они должны быть исправлены до того, как ваш код будет работать.
Предупреждения – это предупреждения. Они предупреждают вас, что то, что вы делаете, вероятно, плохая идея, даже если она работает (или, похоже, работает) для вас в данный момент. Поэтому они тоже должны быть исправлены.
Уведомления – это уведомления. Их следует заметить. Отсюда и название. Возможно, не проблема в том, что ваш код генерирует некоторые, но это то, что вы должны изучать и оценивать в каждом конкретном случае.
И, конечно, гораздо легче заметить уведомления, если вы не получите 400 из них. Таким образом, есть большая выгода для их устранения. Это делает те, которые вы еще не заметили, становятся более заметными.
Да, я бы исключил уведомления из любого PHP-кода, который я пишу, даже если он просто отключает конкретный идентификатор уведомления, когда я исследовал все его экземпляры. Уведомления (т. Е. Неопределенный индекс, инициализированная переменная) очень часто указывают на ту ситуацию, которую вы забыли предвидеть. Вы должны исследовать каждый, устранить настоящие проблемы, а затем, возможно, подавить других (с комментарием, в котором говорится, почему).
В руководстве PHP также говорится, что «сообщения NOTICE предупреждают вас о плохом стиле», поэтому я думаю, что официальная «лучшая практика» будет в значительной степени тем, что я изложил. Соблюдайте хороший стиль, если у вас нет веской причины.
Это зависит от того, какие уведомления – большинство уведомлений являются свидетельством плохого запаха кода – неопределенных индексов массива и т. Д. Если вы подавляете уведомление, оставьте комментарий рядом с ним, указав, почему вы думаете, что он должен быть подавлен.
PHP.net говорит:
Примечание. Включение E_NOTICE во время разработки имеет некоторые преимущества. Для целей отладки: сообщения NOTICE будут предупреждать вас о возможных ошибках в вашем коде. Например, предупреждается использование неназначенных значений. Крайне полезно находить опечатки и экономить время на отладку. Сообщения NOTICE предупреждают вас о плохом стиле. Например, $ arr [item] лучше записывать как $ arr ['item'], поскольку PHP пытается обрабатывать «item» как константу. Если это не константа, PHP предполагает, что это строковый индекс для массива.
Я бы рассматривал каждое уведомление как бесплатную возможность улучшить ваш код. 🙂
Они называются предупреждениями, потому что ваша программа все еще работает. Но это означает, что вы сделали что-то неправильно. Исправьте их, если у вас есть время, чтобы сделать это, и если вы хотите, чтобы код был «чистым» и, возможно, хорошим. Ваш код не подходит, если вы получаете предупреждения.
… и предупреждения могут приводить к ошибкам:
Если вы получаете предупреждение неопределенной переменной, это означает, что вы не проверяли наличие переменной. Что делать, если вы используете эту переменную в запросе MySQL? Это не удастся и сломает вашу программу.
Не показывать предупреждения на веб-сайте. Они представляют часть вашего кода снаружи.
Лучший способ – кодировать таким образом, чтобы избежать предупреждений. 😉
В производственной среде НЕ ДОЛЖНО отображать ЛЮБЫЕ уведомления.
Даже если они разбивают ваше приложение.
Это всего лишь совет безопасности.
Если вы перейдете от старой версии php к недавней, вы должны хотя бы взглянуть на уведомление, чтобы узнать, что это значит. Иногда это касается безопасности, а иногда просто информирует вас о том, что эта функция устарела.
Вы также должны следить за уведомлениями, за исключением случаев, когда вы действительно знаете, что делаете.
Такие вещи, как попытка доступа к неопределенным переменным и неопределенным индексам, являются серьезными ошибками в книге каждого серьезного программиста, поэтому я действительно не понимаю, почему они выбрали это, чтобы быть тем, что вы можете заметить, и пожимаете плечами и уходите. Каждый другой компилятор, который я знаю, просто прекратил бы программу в этом точном месте.
Я всегда их исправлял, они почти всегда являются причиной худших ошибок.