Неопределенный индекс, isset и ссылки в PHP

При доступе к неопределенному индексу пустой ссылки PHP не выдает никаких ошибок.

<?php

$array = &$foo['bar'];
if ($array['stuff']) echo 'Cool'; // No PHP notice
$array['thing'] = 1; // Array created; $foo['bar']['thing'] == 1
$array['stuff']; // PHP notice

Если $array PHP не был бы ссылочным на первую строку.

Почему это не для ссылок? Нужно ли беспокоиться о isset для нулевых ссылок, или PHP внутренне жалуется и не дает мне знать?

3 ответа

Решение

В вашем коде $array нулевой. Следующий код также не даст вам уведомление:

$b = null;
if ($b['stuff']) echo 'cool';

Это странно, этот комментарий в документации указывает на этот факт.

Вы должны поднять свой уровень сообщения об ошибках. Ваш пример $array['stuff'] будет выдавать предупреждения об индексе не найден. Я часто совмещаю тест на ввод с оценкой, чтобы избежать этих предупреждений:

if( array_key_exists("blah",$arr) && strlen($arr['blah']) > 0 ) { 
    ; // do stuff here
}

Я часто объединяю переменные с именами массивов, потому что всякий раз, когда мне приходится копировать код "вырезать и вставить" в следующий раздел, чтобы сделать то же самое, я бы предпочел создать массив имен переменных, а затем перебирать имена переменных. Самое абсурдное условие - когда у меня есть данные для выставления счетов и доставки, где я буду иметь имя переменной массива $BorS или просто $BS а затем наверху установите $BorS="shipping"; и в конечном итоге с действительно интересными утверждениями, такими как:

${$BorS."data"}[${$BorS."_addr1"}]=$input_array[$BorS."_address_line_1"];

Почему бы просто не сделать:

$array = array();
Другие вопросы по тегам