Ответ 1
Активный начался в 2006 году.
И в документации это уведомление об этом в разделе String.
В PHP у меня есть error_reporting
, чтобы сообщать обо всем, включая уведомления.
Почему следующее не бросает никаких уведомлений, ошибок или чего-либо еще?
$myarray = null;
$myvalue = $myarray['banana'];
Действия по устранению неполадок:
$myarray = array();
$myvalue = $myarray['banana'];
// throws a notice, as expected ✔
$myarray = (array)null;
$myvalue = $myarray['banana'];
// throws a notice, as expected ✔
$myarray = null;
$myvalue = $myarray['banana'];
// no notice or warning thrown, $myvalue is now NULL. ✘ Why?
Возможно, это ошибка в PHP, или я просто не понимаю, как это работает.
Активный начался в 2006 году.
И в документации это уведомление об этом в разделе String.
Обычно, когда вы пытаетесь использовать значение одного типа, как если бы это был другой тип, возникает ошибка или предупреждение, или происходит "жонглирование типа". Например, если вы попытаетесь объединить два числа с .
, они оба будут принудительно привязаны к строкам и объединены.
Однако, как объяснено на странице руководства о манипуляции с типом, это не относится к обработке массива, отличного от массива:
Поведение автоматического преобразования в массив в настоящее время undefined.
На практике поведение, возникающее, когда это "поведение w91 > " инициируется разыменованием не-массива, заключается в том, что null
возвращается, как вы заметили. Это не просто влияет на нули - вы также получите null
, если попытаетесь разыменовать число или ресурс.
Существует три типа, которые могли бы использовать синтаксис derefence массива:
Для всех остальных типов PHP возвращает переменную undefined.
Разрушение массива обрабатывается код операции FETCH_DIM_R, в котором используется zend_fetch_dimension_address_read() для извлечения элемента.
Как вы можете видеть, есть специальный случай для NULL и случай по умолчанию, возвращающий переменную undefined.