PHPのnull[0]はエラーにならないしnoticeも出ない

背景

null変数に添字アクセスするところで、落ちると思っていたら落ちなくてびっくりした。

環境

OSX 10.11.5

PHP 7.0.14 (cli) (built: Apr 1 2017 23:41:23) ( NTS )
Copyright © 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright © 1998-2016 Zend Technologies

再現

まずは普通の配列に対して、存在しない添字アクセスをするとどうなるか。

<?php
$a = [];
var_dump($a[1]);

上記コードを実行すると、以下のようにnoticeを出力する。

Notice: Undefined offset: 1 in /Users/kanno/workspace/sandbox/piece/2017/06/25-1036.php on line 4
PHP Notice:  Undefined offset: 1 in /Users/kanno/workspace/sandbox/piece/2017/06/25-1036.php on line 4
NULL

ではnullに対して添字アクセスしてみる。

<?php
var_dump(null[0]);
var_dump(null[1]);

上記コードを実行するとnoticeが出ない。というかエラーにすらならない。

NULL
NULL

わお…。

ちなみに勝手に配列になったりしないかどうかも確認したが、さすがにそれは大丈夫だった。

<?php
$a = null;
var_dump($a[1]);
var_dump($a);
NULL
NULL

ちなみにforeachもいけちゃうのかと思いきや、これはwarningだった。

<?php
foreach (null as $x) {
}
Warning: Invalid argument supplied for foreach() in /Users/kanno/workspace/sandbox/piece/2017/06/25-1036.php on line 2
PHP Warning:  Invalid argument supplied for foreach() in /Users/kanno/workspace/sandbox/piece/2017/06/25-1036.php on line 2

count(null)は0だから普通のfor文ならいけちゃうけど。

<?php
for ($i=0; $i < count(null); $i++) {
}