根据 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, $b, $c,$d或实际上都没有$e错误。大多数时候,我在代码中只看到return;or return 0;,这意味着 NULL,而不是返回的zval*(指针)或zend_error()调用。因此得到上述结果。
不管是什么原因造成的,这并不重要。在这种情况下,您应该始终检查变量是否存在和/或无效。最安全的方法(略有不同的行为)是isset和empty:
isset($a['foo']);
!empty($a['foo']);