我试图找到一个正确的解释性标题,但我不能,我会尝试解释我在这里问的问题:
通常,如果不为变量分配空数组,则可以开始为这样的索引赋值:
$hello["world"] = "Hello World";
...
echo $hello["world"];
但我总是遇到这样的定义:
$hello = array() //assigning an empty array first
$hello["hello"] = "World";
...
echo $hello["hello"];
为什么使用了很多。是否有性能提升或与第二个有关?
感谢。
答案 0 :(得分:7)
有两个原因:
register_globals
的系统上运行时,用户可以添加例如hello[moo]=something
到查询字符串,数组已经用这个初始化了。因为创建了一个新数组,$hello = array();
会覆盖此值。答案 1 :(得分:4)
初始化变量是良好做法 以此为例:
$foo = 'bar';
// 10 lines and 1 year later
$foo['baz'] = 'test';
恭喜,您现在拥有字符串"tar"
。
这可能会意外发生并引入不必要的错误。条件变量创建会变得更糟。通过明确初始化变量的良好习惯,可以轻松避免这种情况。
答案 2 :(得分:3)
$hello = array();
if(someConditionIsTrue){
$hello["world"] = "Hello World";
}
foreach($hello as $val){ // this will not give you any error or warning.
echo $val;
}
但是
if(someConditionIsTrue){
$hello["world"] = "Hello World";
}
foreach($hello as $val){ // this will give you error .
echo $val;
}
答案 3 :(得分:2)
如果我没记错的话,如果error_reporting
为E_ALL
,则第一个会通过PHP发出警告。您应该始终使用第二种方法,因为它显式初始化了一个新数组。如果您正在查看代码并且无处不在,请查看$hello["hello"]
,但无法回想起以前对$hello
的任何引用,这会让您感到困惑。
如果您执行$hello[] = "World"
,则会出现同样的情况,会显示警告