$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)。 –