我很想知道PHP中以下行为是否是有意的。如果是有意的,那么通过在其中创建一个索引来从null变量初始化数组(如第一个代码片段所示)是否被认为是可接受的?
这将输出:
然而,如果数组先被初始化(见下面的代码),我会得到完全相同的输出,但是在第一次尝试使用
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()
。欢迎来到松散类型、隐式转换几乎无所不在的地狱。 - Sammitch$arr=null; $arr["index"] = "value";
- susie derkins如果 $arr 不存在,它将被创建,因此这也是创建数组的另一种替代方法
。所以,当你执行$arr = null;
时,对于PHP来说,它与根本没有定义$arr
是一样的(也许我不是100%确定:https://eval.in/68610),因此当你执行$arr["blah"] = "somevalue";
时,它会为你创建一个数组。 - gen_Eric