根据 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']);