我很想知道 PHP 中的以下行为是否是有意的。而且,如果有意的话,通过创建索引来从空变量初始化数组被认为是可以接受的(如第一个代码片段中所做的那样)?
error_reporting(E_ALL);
$arr = null;
echo ($arr["blah"]===null) ? "null" : $arr["blah"];
$arr["blah"] = "somevalue";
echo "<br>";
echo ($arr["blah"]===null) ? "null" : $arr["blah"];
var_dump ($arr);
这输出
null
somevalue
array (size=1)
'blah' => string 'somevalue' (length=9)
但是,如果首先初始化数组(请参见下面的代码),我会得到完全相同的输出,但是当我第一次尝试时会给出“未定义索引”通知$arr["blah"]
error_reporting(E_ALL);
$arr = array();
echo ($arr["blah"]===null) ? "null" : $arr["blah"];
$arr["blah"] = "somevalue";
echo "<br>";
echo ($arr["blah"]===null) ? "null" : $arr["blah"];
var_dump ($arr);
如果数组为空,PHP 将不会尝试进行比较。
在第二种情况下,由于设置了数组,因此确实发生了比较。 PHP 不会检查它是否为空。
您的三元数正在尝试访问变量 $arr["blah"],而不是在进行比较之前检查它是否已设置。
正确的写法是:
error_reporting(E_ALL);
$arr = array();
if(isset($arr["blah"])) echo ($arr["blah"]===null) ? "null" : $arr["blah"];
$arr["blah"] = "somevalue";
echo "<br>";
if(isset($arr["blah"])) echo ($arr["blah"]===null) ? "null" : $arr["blah"];
var_dump ($arr);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)