微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如果尝试使用方括号来获取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\']);    
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。