$arr = array(); // is this line needed?
$arr[] = 5;
我知道它没有第一行,但它通常包含在实践中。在用[]添加值之前是否需要声明PHP数组?
是什么原因?没有它就不安全?
我知道你也可以这样做:
$arr = array(5);
,但我说的是,你需要通过一个新增项目1例。
$arr = array(); // is this line needed?
$arr[] = 5;
我知道它没有第一行,但它通常包含在实践中。在用[]添加值之前是否需要声明PHP数组?
是什么原因?没有它就不安全?
我知道你也可以这样做:
$arr = array(5);
,但我说的是,你需要通过一个新增项目1例。
如果您没有声明新的数组,并且创建/更新数组的数据因任何原因而失败,那么任何未来尝试使用该数组的代码将会由于该数组不存在而存在。
例如,如果未声明数组并且未向其添加任何值,则foreach()
将引发错误。但是,如果数组只是空的,则不会发生错误,就像您声明的那样。
这只是一个很好的做法。假设你在一个循环内追加数组(相当普遍的做法),但是然后在所述循环之外访问数组。如果没有数组声明,如果你从未进入循环,你的代码会抛出错误。
这取决于你的错误检查。如果你有严格的错误报告,它会给你一个通知,但它应该仍然在技术上没有它。
它在好的情况下,当你需要它作为一个全局变量或希望在不同的功能
PHP是一种松散类型的语言一次又一次地重复使用相同的阵列。这是完全可以接受的。话虽如此,真正的程序员总是宣布他们的变数。
[真正的程序员](https://www.xkcd.com/378/) – Gordon
@Gordon正是我在想什么;) – AlienWebguy
同意@djdy,只是一个替代我很乐意发布:
<?php
// Passed array is empty, so we'll never have $items variable available.
foreach (array() AS $item)
$items[] = $item;
isset($items) OR $items = array(); // Declare $items variable if it doesn't exist
?>
只是想指出的是,PHP documentation on arrays
实际上是在文档中关于这个会谈。
从PHP站点,伴随代码片段:
$arr[key] = value;
$arr[] = value;
// key may be an integer or string
// value may be any value of any type
“如果
$arr
不存在,它将被创建,所以这也是创建一个数组的另一种方式。”
但是,正如其他答案所述......你应该为你的变量声明一个值,因为如果你不这样做,所有坏的事情都会发生。
想想你身后的编码员!如果您刚刚看到$arr[] = 5
,则不知道$arr
可能是什么,而不读取范围中的所有前面的代码。明确的$arr = array()
行明确表示。
在PHP 5.4.x - 5.6.x中:$ arr = []也适用。 –
我强烈建议在添加值之前声明数组。除了上面提到的所有内容之外,如果数组在循环内部,您可能会无意中将元素推入您的数组中。我刚刚观察到这造成了一个代价高昂的错误。
//Example code
foreach ($mailboxes as $mailbox){
//loop creating email list to get
foreach ($emails as $email){
$arr[] = $email;
}
//loop to get emails
foreach ($arr as $email){
//oops now we're getting other peoples emails
//in other mailboxes because we didn't initialize the array
}
}
除非您喜欢关于未声明的变量的通知,否则我会建议初始化。另外,它只是用于清晰的代码(很明显'$ foo = array()'并且它不是一个字符串转入数组等)。 –
@布拉德克里斯蒂:除非没有触发这样的通知。 – BoltClock
@BoltClock:取决于[你正在使用的版本](https://bugs.php.net/bug.php?id=28151)。 –