Когда появляется уведомление, код может работать, но может не отображать то, что мы ожидаем.
Я думаю, что это три типа новостей , которые мы можем чаще получать в PHP.
Примечание: неопределенная переменная
Примечание: неопределенный индекс
Примечание: Неопределенное смещение
Что означают эти три новости и что могло их породить?
Примечание:
Этот вопрос существует в SO на английском языке , идея состоит в том, чтобы иметь хороший ответ также на испанском языке, который помогает понять проблемы, которые PHP всегда показывает нам на английском языке.
Notice: Undefined variable
возникает, когда вы используете переменную в операции, но эта переменная не была определена ранее. Например:Notice: Undefined offset
возникает, когда в массиве вы пытаетесь получить доступ к числовому индексу, который не существует в этом массиве. Например:Notice: Undefined index
возникает, когда вы пытаетесь получить доступ к буквенно-цифровому индексу в несуществующем массиве. Несколько примеров:Переменная: пространство памяти, на которое в php мы ссылаемся с именем, начинающимся с,
$
например ,$edad
это может быть переменная для хранения возраста человека.Если предпринята попытка прочитать (использовать) переменную до того, как она была определена или находится за пределами видимости, PHP возвращает «Неопределенная переменная» .
Пример, когда
$b
он не упоминался перед использованием набора:Пример, когда
$b
на него ссылаются за пределами его видимости:Упомянув переменную, она уже определена, хотя обычно это определение сопровождается инициализацией, поскольку, если мы определяем переменную, логично, что она имеет начальное значение, имеющее смысл. Решение состоит в том, чтобы определить переменную до ее использования и в пределах видимости, где это необходимо, например:
$b
до или после$a
:Index : это строка , которая используется в качестве ключа для ссылки на значение в ассоциативном массиве. В этом примере имя и фамилия являются индексом ассоциативного массива
$estudiante
:Неопределенный индекс означает, что строка , которую мы передаем как индекс , когда хотим прочитать значение из массива, не существует. В примере Index
domicilio
не существует, поэтому$dom = $estudiante['domicilio'];
он возвращает Undefined Index .Вы можете проверить существование индекса с помощью функции
array_key_exists($index);
Смещение : похоже на индекс , но для обычных массивов, где индекс представляет собой целое число, отражающее позицию (или смещение ) в массиве. При попытке прочитать значение массива в несуществующей позиции мы получаем Undefined Offset . Пример:
Один из способов избежать этих ошибок — проверить, что индекс больше 0 и меньше числа элементов в массиве (
count($arr)
);Я думал это через гугл переводчик. Я использую для проверки массивов, проверяя ключ Пример проверки файлов cookie и если они не установлены:
if (!array_key_exists(COOKIE_ID,$_COOKIE)){Setcookie(COOKIE_ID, 'Y2l1ZGFkYW5v', time() + (3600),'','','', true);}
Во-первых, уведомление я бы лучше перевел как уведомление.
Уведомления не являются ошибками . На самом деле это предупреждения , и в данном случае это просто предупреждение о том, что эти индексы не существуют в массиве.
Чтобы предотвратить появление этих сообщений в Интернете, у вас есть несколько вариантов.
Удалите в конфигурации PHP, которая показывает вам уведомление
Отредактируйте php.ini и найдите директиву
error_reporting
Чуть выше у вас будет объяснение, что именно это означает. В моем случае в производстве, например, я указал это:
Там я указываю, что мне нужны все ошибки, но я не хочу ни предупреждений об устаревших функциях, ни строгих предупреждений, ни предупреждений, ни уведомлений.
Отключить уведомления в каждом файле php
В каждом файле php вам нужно будет выполнить эту функцию, чтобы она не показывала вам эти ошибки на веб-странице, сгенерированной файлом php.
Программа правильно определяет, существует он или нет
В php есть функция
isset()
, которая просто возвращает значение, если переменная определена и не равна нулю.Вместо прямого использования массива с таким индексом, как
$arr['indice']
, вы можете создать переменную, которая, в зависимости от того, существует ли предыдущий индекс в массиве, имеет значение или нет. Эта переменная $index больше не будет выдавать уведомление, потому что она всегда будет иметь значение.Приведенная выше строка кода также эквивалентна: