PHP Notice. Зачем они нужны программисту.

запостил: 19 Июля 2010 г.

Ошибка - как тычок лицом в мониторВот уже примерно пара месяцев, как я избавляюсь от сообщений типа NOTICE интерпретатора PHP. Раньше я и сам не обращал на них внимания, а просто отключал сообщения о таких ошибках. Казалось бы, ну зачем они вообще нужны, тревожат по всяким мелочам, вроде использования заранее не объявленной переменной или попытке определения уже созданной константы. Ведь PHP и так создаст переменную, если она не была объявлена заранее. И тем не менее, замечания NOTICE довольно полезны, об этом мне и хочется сегодня поговорить.

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

Ну а какую же пользу мы можем извлечь из NOTICE в настоящее время?

Ловля “неуловимых” ошибок.

Если NOTICE настолько бесполезны, то зачем их вообще ввели в интерпретатор? На самом деле, NOTICE – это не бесполезные сообщения, а потенциальные ошибки скрипта, которые могут проявиться в любой момент при каком-либо определенном значении какой-либо переменной ну или просто звезды неудачно расположатся :)

Бывают такие ситуации, когда ошибка возникает “непонятно откуда”, а поиск ее вручную занимает часы, а иногда и дни. Вроде, все написано правильно – ан нет, откуда-то появляется WARNING, а то и ERROR. А при включенных сообщениях NOTICE подобные ситуации отслеживаются на раз. Естественно, если Вы следите за ними и вовремя исправляете появляющиеся нотисы.

Защита от “пустых” переменных.

Конечно, проверку на валидность значения переменных, передаваемых, например, в функции, никто не отменяет, но тем не менее, проверка на существование переменной будет полезна. В этом случае мы, например, можем задать значение по умолчанию и продолжить обработку скрипта, обойдя проверку на валидность. Согласитесь, зачем эта проверка нужна, если мы только что задали default-ное значение, которое, без всякого сомнения, должно быть валидным и правильным.

Следование правилам программирования.

Лишние (точнее, дополнительные – лишних проверок, как известно, не бывает) проверки, конечно, дадут дополнительную нагрузку на сервер. Зато в этом случае код будет более “правильным”, то есть соответствующий правилам программирования, которыми многие, особенно начинающие, программисты так любят пренебрегать.

К тому же, вникание в то, о чем же сообщают эти самые NOTICE, как правило, заставляет программиста изучить не просто основные операторы, функции и конструкции языка PHP, а понять язык более глубоко и детально.

Написание максимально валидного кода для интерпретатора.

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

Правда, не думаю, что скорость выполнения при этом сильно возрастет, скорее всего прирост не будет заметен вообще (невооруженным глазом уж точно). Но есть в отсутствии NOTICE один замечательный плюс, который я просто не могу обойти стороной.

Хороший код – хорошая оплата.

Всегда есть те, кто готов работать за еду. Правда вот качество этой работы...Умение писать код без ошибок – вполне логичный повод просить и получать бОльшую оплату за свою работу. Конечно, некоторые заказчики могут отвернуться от Вас и уйти к тем, кто писал и пишет “за еду”, мой Вам совет – не огорчайтесь. Именно такие мелочные, стремящиеся сэкономить везде и на всем, заказчики создают фрилансеру максимальное количество проблем. Как правило, это выражается в огромном количестве “мелких поправок”, в результате чего сайт становится похож либо на огромное число заплаток, либо неоднократно переписывается с самого нуля (естественно, бесплатно, “тут ведь надо совсем чуть-чуть поправить, тебе же тут на пять минут работы”).

И напоследок. Когда и где желательно все же отключать вывод ошибок.

Само собой, на “боевом” сервере, то бишь там, где лежит Ваш сайт для публичного обозрения, а не для Вашего непосредственного копания кода вывод ошибок должен быть отключен. Причем, не только нотисов, но и всех остальных. В этом случае потенциального взломщика ждет потенциальный облом, поскольку сообщение об ошибке он не увидит, даже если сможет скомпрометировать Ваш код.

в результате чего становится проще отключить вывод ошибокТакже есть подозрение, что бесполезно выправление NOTICE при использовании CMS, обвешанной плагинами, как новогодняя елка игрушками. Если в ядре CMS ошибок, может, и нет, то плагины и разнообразные дополнительные модули частенько пишут без оглядки на то, как это написано – лишь бы работало, как говорится. Буду рад оказаться неправ, но все эти шаблонизаторы, модули и прочее сильно усложняют код, в результате чего становится проще отключить вывод ошибок и не обращать на них внимание.

Ну и напоследок...

Такая вот мелочь, на первый взгляд, как NOTICE, которую обычно отключают “чтобы не надоедали, и с ними же все работает” может оказаться очень даже нужной и полезной. Мы уже говорили, например, о разнице между кавычками о апострофами при задании переменных и вполне увидели, что подобная “мелочь” может оказаться совсем даже не мелочью. Так что, уважаемый мой читатель, если Вам интересны размышления о подобных “мелочах” - сообщите мне обязательно. Надеюсь, что мы вместе найдем еще немало полезных и интересных примеров, которые незаметны многим из тех, кто гордо именует себя PHP-программистами. До скорых постов.


На заметку: Если Ваше занятие - создание и продвижение сайтов в Туле, Самаре, Новосибирске или даже в солнечной Калифорнии - качественный код ценится везде. Лично я всегда стараюсь писать именно такой код, а Вы, уважаемый мой читатель, часто обращаете на это внимание?

Внимание! При копировании данного материала обязательна прямая текстовая ссылка на эту страницу.

<< вернуться

Очень надеюсь, что этот пост был для Вас полезен. А если так - поделитесь ссылкой со своими друзьями. Уверен, они будут не против. :)

 

А еще лучше выскажите свое мнение по этой теме.

На эту тему говорят:

Vardi

19 Июля 2010 г.

Учитывая то факт, что php я например начал учить совсем недавно и видя компетентность автора этого блога в данном вопросе, есть предложение. Почему бы не организовать серию постов в помощь совсем новичкам? Например рекомендации по началу его изучения, на что стоит обратить внимание, какую среду разработки лучше использовать, с какой начинать и прочее...
Да, в интернете полно информации и книг на эту тему, но в таком количестве материала очень легко запутаться и не понять, где что-то стоящие, а где нет, особенно тем кто раньше не занимался программирование.

ZeroXor

19 Июля 2010 г.

Даже и не знаю, что ответить. Действительно, самых разнообразных учебных материалов по PHP сейчас пруд пруди: хоть в Сети, хоть на полках книжных магазинов.

Что же касается, например, среды разработки - это вообще вопрос холиварный, особенно если учесть, что популярными средами разработки (Eclipse и NetBeans) я не пользовался толком, потому ничего сказать о них не могу.

Хотя, в принципе, можно (я это и планировал) продолжить серию постов о PHP, в которой рассказывать о том, что обычно остается за страницами самоучителей и, тем более, компьютерных курсов, о некоторых секретах простых на первый взгляд вещей.

Vardi

19 Июля 2010 г.

Главное изложить свой опыт, это было бы гораздо более интереснее чем сухие книги написанные не знакомыми мне людьми, о чей компетентности мне нечего не известно... Ну вот, почему не использовались Eclipse и NetBeans, опять таки по опыту работы? Какие среды использует автор блога? Вот уже материал для целого поста или двух:)

ZeroXor

19 Июля 2010 г.

Это да, спасибо за темы :) Кстати, о PHP я планирую писать по понедельникам. Так что в следующий понедельник будет что нибудь на эту тему.

chodex

20 Июля 2010 г.

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

ZeroXor

20 Июля 2010 г.

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

В любом случае, даже если вывод ошибок и включен, то их можно отключить хоть в .htaccess, хоть непосредственно в коде скрипта. В этом плане никаких проблем нет.

Тем не менее, отключать Notice во время разработке действительно глупо, с этим с согласен целиком и полностью. Собственно, с этой целью пост и был написан.

Chodex

01 Августа 2010 г.

Я имел ввиду различные версии библиотек и прочего, очень часто сталкивался со специфичными багами, приходилось немало провозиться.

Никита Красноярцев

04 Августа 2010 г.

А как включить эти NOTICE, если их не наблюдается вовсе?
Например как error_reporting(E_ALL) можно?

ZeroXor

04 Августа 2010 г.

Chodex, было бы интересно почитать об этом опыте.

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

Если Вам есть что сказать, скажите это прямо здесь и сейчас.

При написании комментария можно использовать bb-теги [b][i][u], а также [quote] для цитирования.

Введите код, изображенный на картинке

RSS-лента блога веб-фрилансера Следуй в Twitter Я на Facebook

Последние новости:

Apple хочет в 3D.

Да-да, уважаемый мой читатель, крутящегося во все стороны двумерного мира им уже мало...

В социальных сетях снова находят ошибки.

Не стоит держать свои конфиденциальные данные в социальных сетях.

Город на Неве продолжает искать работу.

Работу по-прежнему найти довольно легко. Если Вы не в Петербурге.

Optimus на две симки уже в продаже.

Наконец-то появился симпатичный телефон на две сим-карты. Да еще и на Android.

Сезон рыбалки в ЖЖ вновь открыт. Не попадитесь!

Снова фишинг, снова пользователи попадаются. Будьте внимательны!

все новости

Теги постов:

Архив постов:

2012

Февраль

Январь

2011

2010

2009

Блогролл