массивы — «Примечание: неопределенная переменная», «Примечание: неопределенный индекс» и «Примечание: неопределенное смещение» с использованием PHP

(дополнительный совет)

  • Когда я сталкивался с этими и другими проблемами, я использовал IDE NetBeans (бесплатно), и он давал мне массу предупреждений и уведомлений. Некоторые из них предлагают очень полезные советы. Это не является обязательным требованием, и я больше не использую интегрированные среды разработки, за исключением крупных проектов. Я более vim человек в эти дни :).

ПОЧЕМУ ЭТО ПРОИСХОДИТ?

Со временем PHP стал более ориентированным на безопасность языком. Настройки, которые раньше были отключены по умолчанию, теперь включены по умолчанию. Прекрасным примером этого является E_STRICT , который стал включен по умолчанию в PHP 5.4.0 .

Кроме того, согласно документации PHP, по умолчанию E_NOTICE отключен в php.ini. Документы PHP рекомендуют включать его в целях отладки . Однако, когда я загружаю PHP из репозитория Ubuntu — и из стека Windows BitNami — я вижу что-то еще.

 ; Common Values: ; E_ALL (Show all errors, warnings and notices including coding standards.) ; E_ALL {amp}amp; ~E_NOTICE (Show all errors, except for notices) ; E_ALL {amp}amp; ~E_NOTICE {amp}amp; ~E_STRICT (Show all errors, except for notices and coding standards warnings.) ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) ; Default Value: E_ALL {amp}amp; ~E_NOTICE {amp}amp; ~E_STRICT {amp}amp; ~E_DEPRECATED ; Development Value: E_ALL ; Production Value: E_ALL {amp}amp; ~E_DEPRECATED {amp}amp; ~E_STRICT ; http://php.net/error-reporting error_reporting = E_ALL {amp}amp; ~E_DEPRECATED {amp}amp; ~E_STRICT 

Обратите внимание, что error_reporting фактически установлен на производственное значение по умолчанию, а не на значение «по умолчанию» по умолчанию. Это несколько сбивает с толку и не документировано за пределами php.ini, поэтому я не проверял это в других дистрибутивах.

Чтобы ответить на ваш вопрос, однако, эта ошибка появляется сейчас, когда она не появлялась раньше, потому что:

  1. Вы установили PHP, и новые настройки по умолчанию немного плохо документированы, но не исключают E_NOTICE .

  2. Предупреждения E_NOTICE такие как неопределенные переменные и неопределенные индексы, на самом деле помогают сделать ваш код чище и безопаснее. Я могу вам сказать, что несколько лет назад E_NOTICE заставило меня объявить переменные. Это значительно облегчило изучение языка C, если не объявлять переменные, это намного больше неприятностей.

  1. Выключите E_NOTICE , скопировав «Значение по умолчанию» E_ALL {amp}amp; ~E_NOTICE {amp}amp; ~E_STRICT {amp}amp; ~E_DEPRECATED и заменив его тем, что в настоящий момент не прокомментировано после знака равенства в error_reporting = . Перезапустите Apache или PHP, если используете CGI или FPM. Убедитесь, что вы редактируете «правильный» php.ini. Правильным будет Apache, если вы используете PHP с Apache, fpm или php-fpm, если используете PHP-FPM, cgi, если используете PHP-CGI и т. Д. Это не рекомендуемый метод, но если у вас есть устаревший код, который собирается быть чрезвычайно трудным для редактирования, тогда это может быть вашим лучшим выбором.

  2. Отключите E_NOTICE на уровне файлов или папок. Это может быть предпочтительнее, если у вас есть какой-то устаревший код, но в противном случае вы хотите сделать все «правильно». Для этого вам следует проконсультироваться с Apache2, Nginx или любым другим вашим сервером. В Apache вы должны использовать php_value внутри {amp}lt;Directory{amp}gt; .

  3. Перепишите свой код, чтобы он стал чище. Если вам нужно сделать это при переходе в производственную среду или вы не хотите, чтобы кто-то видел ваши ошибки, убедитесь, что вы отключили любое отображение ошибок и регистрируете только свои ошибки (см. log_errors и log_errors в php.ini и на вашем сервере). настройки).

Чтобы расширить вариант 3: это идеал. Если вы можете пойти по этому пути, вы должны. Если вы изначально не идете по этому пути, рассмотрите возможность его перемещения в конечном итоге, протестировав свой код в среде разработки.

Пока вы это делаете, избавьтесь от ~E_STRICT и ~E_DEPRECATED чтобы увидеть, что может пойти не так в будущем. Вы увидите много незнакомых ошибок, но это позволит вам избежать неприятных проблем, когда вам потребуется обновить PHP в будущем.

Undefined variable: my_variable_name — это происходит, когда переменная не была определена перед использованием. Когда скрипт PHP выполняется, он просто принимает нулевое значение. Однако в каком сценарии вам нужно проверить переменную, прежде чем она будет определена?

В конечном счете, это аргумент в пользу «небрежного кода». Как разработчик, я могу сказать, что мне нравится, когда я вижу проект с открытым исходным кодом, в котором переменные определены настолько высоко, насколько это возможно.

 function foo() { $my_variable_name = ''; //.... if ($my_variable_name) { // perform some logic } } 

Undefined index: my_index — это происходит, когда вы пытаетесь получить доступ к значению в массиве, а оно не существует. Чтобы предотвратить эту ошибку, выполните условную проверку.

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector