Я недавно наткнулся на следующее:
<? $d=false; var_dump($d[123]); ?>
который дал NULL
, но (неожиданно для меня) без какого-либо уведомления, например
<? $d=array(); var_dump($d[123]); ?>
действительно производит хорошо известную
Notice: Uninitialized string offset: 123 in - on line 1
Что здесь происходит? Есть ли какая-либо документация по этому поведению?
Отсюда :
Доступ к переменным других типов (не включая массивы или объекты, реализующие соответствующие интерфейсы) с использованием [] или {} молча возвращает NULL.
Наверное, это то, что вы бы назвали неопределенным поведением.
Это имеет смысл, поскольку логическое значение не может иметь смещение.
error_reporting(E_ALL); $d = TRUE; var_dump($d[0]);
Это также создает NULL
(если FALSE
принудительно вводится в пустую строку, имеет смысл, что TRUE
будет 1
).
Плюс, что мезе сказал 🙂
Быстрый просмотр исходного кода показывает, что это ожидаемое поведение. Но не спрашивайте меня, почему они это сделали …