В 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 .
Обычно, когда вы пытаетесь использовать значение одного типа, как если бы это был другой тип, возникает либо ошибка, либо предупреждение, или происходит «жонглирование типа». Например, если вы попытаетесь объединить два числа .
, они оба будут принуждаться к строкам и объединены.
Однако, как объясняется на странице руководства о манипуляции типа , это не относится к обработке массива, отличного от массива:
Поведение автоматического преобразования в массив в настоящее время не определено.
На практике поведение, которое происходит, когда это «неопределенное поведение» инициируется разыменованием не-массива, заключается в том, что null
возвращается, как вы заметили. Это не просто влияет на nulls – вы также получите null
если попытаетесь разыменовать число или ресурс.
Существует три типа, которые могут иметь смысл использовать синтаксис синтаксиса массива :
Для всех остальных типов PHP возвращает неопределенную переменную .
Разрушение массива обрабатывается кодом операции FETCH_DIM_R , который использует zend_fetch_dimension_address_read () для извлечения элемента.
Как вы можете видеть, есть специальный случай для NULL и случай по умолчанию, возвращающий неопределенную переменную .