Неопределенный индекс, 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"];