在使用[]添加值之前是否需要声明PHP数组?

rya*_*nve 77 php arrays

$arr = array(); // is this line needed?
$arr[] = 5;
Run Code Online (Sandbox Code Playgroud)

我知道它在没有第一行的情况下有效,但它通常包含在实践中.

是什么原因?没有它会不安全吗?

我知道你也可以这样做:

 $arr = array(5);
Run Code Online (Sandbox Code Playgroud)

但我在谈论你需要逐个添加项目的情况.

djd*_*jdy 89

如果您没有声明新数组,并且创建/更新数组的数据因任何原因失败,那么尝试使用该数组的任何未来代码都将E_FATAL因为该数组不存在而导致.

例如,foreach()如果未声明数组且未向其添加任何值,则会抛出错误.但是,如果数组只是空的,则不会发生错误,就像您声明它一样.

  • @Gordon,如果$ something不等于1则无法正常工作的例子:if($ something == 1){$ rows [] ="a"; $ rows [] ="b"; } foreach($ rows as $ row){}如果将$行声明为$ rows = array(),则可以避免错误; 在if语句发生之前. (2认同)

Cha*_*rry 23

只是想指出PHP文档arrays实际上是在文档中讨论这个问题.

从PHP站点,附带代码片段:

$arr[key] = value;
$arr[] = value;
// key may be an integer or string
// value may be any value of any type
Run Code Online (Sandbox Code Playgroud)

"如果$arr还不存在,它将被创建,所以这也是创建数组的另一种方法."

但是,正如其他答案所述...你真的应该为你的变量声明一个值,因为如果你不这样做会发生各种坏事.


Ali*_*guy 14

Php是一种松散类型的语言.这完全可以接受.话虽这么说,真正的程序员总是声明自己的变量.

  • @Gordon 正是我在想的 ;) (2认同)

Rob*_*gar 6

想想那些追随你的程序员!如果您只是看到$arr[] = 5,如果$arr没有阅读范围中的所有前面的代码,您可能不知道可能是什么.显式$arr = array()行清楚地表明了这一点.

  • 在 PHP 5.4.x - 5.6.x 中: $arr = [] 也有效。 (2认同)