【发布时间】:2013-11-15 19:29:15
【问题描述】:
我很想知道 PHP 中的以下行为是否有意。而且,如果有意的话,是否可以通过在数组中创建索引来从空变量初始化数组(就像在第一个代码 sn-p 中所做的那样)?
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);
【问题讨论】:
-
这是有意的,但强烈不推荐。这是过去的遗物,而不是应该在好的代码中使用的任何东西。始终在使用前初始化变量。
-
您应该查看函数
isset()、is_null()和empty()。欢迎来到松散类型、隐含的几乎所有地狱。 -
我可能没有完全理解这个问题,但是在“分配”时,人们会使用
=运算符而不是检查==或===的条件语句我错过了什么这里? IMO,您不能将条件传递为echo -
@Fred-ii- 这些条件检查仅供我调试以打印出正在发生的事情。问题是为什么可以为空变量的索引赋值。似乎是个坏主意。
$arr=null; $arr["index"] = "value";