2011-10-09 70 views
3

我想知道PHP如何處理匿名數組,如果我做這樣使用它foreach循環:匿名數組與PHP

foreach(array('a', 'b') as $foo) { 
    // ... 
} 

如果數組被每一步重建這是行不通的 - 但它有效,所以看起來PHP爲該數組創建了一個變量(或者類似的東西,其實並不重要) - 這意味着這實際上不會有糟糕的性能。但是,有沒有爲什麼不使用匿名數組與foreach循環? (它有點「看起來錯/糟糕」給我)

+0

不是你的問題的一個問題,但是這個代碼也讓我感到困惑:P。我會使用array-map(http://php.net/manual/en/function.array-map.php)來避免這種情況:P – Nanne

+0

我認爲'foreach'中匿名數組的最佳示例是:'foreach(range('a','z')as $ char){}' – ComFreek

+1

「PHP爲該數組創建了一個變量(或類似的東西,其實並不重要)」 - 它的確如此,無所謂 - 如果您將其存儲在命名數組中,您將創建一個。 – Eric

回答

2

這是一個非常正常的數組,而且應該工作。

你的術語很怪異,匿名對函數有意義,因爲通常有名稱,但對於數組?如果您不直接將其分配給變量,是整數匿名嗎? :) Nah ..

+1

是的,我知道這個命名問題,但想不出一個更好的(適當的)形容詞。有什麼建議麼? – Niko

+0

我的觀點是:不需要形容詞,因爲*沒有什麼特別的事情正在發生。真。想想看。它就像'$ x = 1; $ Y = 2; $ z = $ x + $ y' vs'$ z = 1 + 2'。你不知道你可以直接在那裏寫'2'而不用將它分配給一個變量。或'foreach(functionreturninganarray()as $ foo)'...... –

+0

這正是我的問題所在 - 如果有任何區別。沒看清楚,謝謝你指出! – Niko

5

我沒有看到一個不使用它的理由。

無論您是使用直接初始化的數組還是使用數組變量作爲參數爲foreach。它們都是有效的參數,沒有理由認爲匿名數組的處理方式不同。

從代碼維護的角度來看,它也完全清楚這裏正在做什麼,所以也沒有可讀性問題。

+5

通過避免使用臨時數組變量,您還可以減少變量範圍的污染。這是一個小問題,但也是一個很好的副作用。 –