在使用像数组之类的变量之前分配array()

时间:2011-06-20 06:04:49

标签: php arrays

我试图找到一个正确的解释性标题,但我不能,我会尝试解释我在这里问的问题:

通常,如果不为变量分配空数组,则可以开始为这样的索引赋值:

$hello["world"] = "Hello World";
...
echo $hello["world"];

但我总是遇到这样的定义:

$hello = array() //assigning an empty array first
$hello["hello"] = "World";
...
echo $hello["hello"];

为什么使用了很多。是否有性能提升或与第二个有关?

感谢。

4 个答案:

答案 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_reportingE_ALL,则第一个会通过PHP发出警告。您应该始终使用第二种方法,因为它显式初始化了一个新数组。如果您正在查看代码并且无处不在,请查看$hello["hello"],但无法回想起以前对$hello的任何引用,这会让您感到困惑。

如果您执行$hello[] = "World",则会出现同样的情况,会显示警告