PHPのソースコード(Zend/zend_execute.c
)によると、オフセット/インデックスにアクセスするときにエラーをトリガーできるのは、文字列、配列、およびオブジェクトのみです。残りは多かれ少なかれ無視されます:
$a = true;
$b = false;
$c = null;
$d = 1;
$e = 1.234;
$f = '';
$g = array();
$h = new stdClass;
echo $a[0]; // NULL
echo $b[0]; // NULL
echo $c[0]; // NULL
echo $d[0]; // NULL
echo $e[0]; // NULL
echo $f[0]; // E_NOTICE: Uninitialized string offset
echo $g[0]; // E_NOTICE: Undefined offset
echo $h[0]; // E_FATAL: Cannot use object as array
、、、、または実際$a
にエラーを吐き出すことはありません。ほとんどの場合、コードではorが表示されます。これは、返された(ポインター)または呼び出しではなく、NULLを意味します。したがって、上記の結果。$b
$c
$d
$e
return;
return 0;
zval*
zend_error()
このように行われた理由が何であれ、それは実際には問題ではありません。このような場合は、変数の存在や無効を常にチェックする必要があります。最も安全な方法(わずかに異なる動作)は次isset
のempty
とおりです。
isset($a['foo']);
!empty($a['foo']);