SharePoint Alfresco PHP MySQL
О сайте Контакты
суббота, 14 июня 2014 г.

«Notice: Undefined variable» в PHP

Многие начинающие разработчики PHP видят на экране или в логах сообщения типа “Notice: Undefined variable”, означающее, что была использована переменная, которая не объявлена заранее. Дело в том, что PHP является очень гибким языком программирования, позволяя использовать переменные без инициализации.

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

Если разработчик не инициализирует переменные, а начинает их использование с проверки их значения, то при соответствующем уровне вывода ошибок, будет отображено сообщение «Notice: Undefined variable». Инициализация переменных означает присвоение им определенного типа и значения перед использованием. Если этого не сделать, интерпретатор сделает это по своим внутренним правилам, которые могут идти вразрез с пониманием программиста. Кроме того, вы могли выше по коду использовать переменную с тем же именем, не очистив у нее значение. Забыв про такую переменную и не сделав инициализацию, вы гарантированно получите неверные результаты.

Можно выделить 2 метода «борьбы» с описываемыми Notice: выключить предупреждения данного уровня в настройках, или инициализировать указанные переменные. Советую использовать второй путь.

Для тех, кто все же выбрал выключить предупреждения, чтобы они не отображались на экране и в логах, делается это в настройках PHP.INI. Отредактируйте в текстовом редакторе свой файл настроек PHP.INI, отыскав слово error_reporting и внеся такую строку:

error_reporting = E_ALL & ~E_NOTICE

При этом будут отображаться все ошибки, кроме типа E_NOTICE. Подробнее о директиве error_reporting вы можете почитать в самом же файле PHP.INI, там есть обширная справка о директиве error_reporting чуть выше самой директивы.

Буду рад ответить на любые вопросы относительно данной темы и в общем по PHP.

Sergey Lysenko, суббота, 14 июня 2014 г.

Комментарии: