如果尝试使用方括号来获取NULL上键的值,为什么PHP中没有错误?

| 我在facebook的phpsh和标准的cr脚的php中都尝试了以下代码-令人讨厌的重复:
$a = NULL;
echo $a[\'foobar\'];
令我遗憾的是(当涉及到PHP时,我不会称其为惊讶或失望),我没有收到任何错误,警告或异常之类的信息。 尝试从None或nil取消引用键时,Ruby和Python等更聪明的语言都会抱怨。 PHP如何解释这种情况?是唯一在各处插入is_null检查的方法吗?我应该责怪Smarty不帮我吗?     
已邀请:
根据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;
return 0;
,这意味着NULL,而不是返回的
zval*
(指针)或
zend_error()
调用。因此上面的结果。 不管这样做的原因是什么,都没有关系。在这种情况下,您应始终检查变量是否存在和/或无效。最安全的方式(行为略有不同)是
isset
empty
isset($a[\'foo\']);
!empty($a[\'foo\']);    
    

要回复问题请先登录注册