2012-07-07 45 views
19

我正在檢查標準PHP庫(SPL)。我之前只使用了數組,並且剛剛發現PHP有這麼多標準類。但是手冊中沒有任何文字是否建議使用它。例如,他們明確建議使用foreach構造來迭代數組,因爲它更快。那這個圖書館呢?如果我需要在對象中存儲一些數據,我應該使用一些具體的SPL類來處理我的情況,或者使用標準數組更好嗎?PHP SPL,值得使用還是原始數組函數更好?

+1

如果將數據存儲在對象中,則可以通過實現ArrayAccess或ArrayIterator來遍歷該對象,但底層數據仍然存儲在普通的舊PHP數組中。常規數組很好,如果你想要將數據存儲在一個對象中,可以自行決定實現[Iterators](http://www.php.net/manual/en/spl.iterators.php)中的一個。 – drew010 2012-07-07 22:31:04

回答

28

有很多你的問題。你應該使用SPL數據結構嗎?這取決於。可以作爲地圖,鏈表或數組。實際上你很少需要一種數據類型作爲所有這些東西在同一時間,所以SPL數據類型的重點本質不是那麼有限。實際上,大多數「外人」(以及一些「內部人士」)會認爲PHP的陣列是一個諷刺。

PHP數組的主要缺點是它使用了大量的內存。即使你只是想要一個固定的,順序的索引數組,你也需要將東西連接在一起並存儲在鍵上。儘管如此,如果您主要追加數據並對它進行迭代,PHP的數組通常比對象類型快得多,可能是因爲函數調用會減慢速度。

一般來說,我沒有看到很多人使用SPL數據結構。大多數情況下,我認爲,因爲在PHP和Web應用程序的環境中,它們通常不太適用。您通常處理小型數組,其中內置運算符的方便性和數組函數超過了SPL類型的任何優點。

這就是說:

  • 如果你在一個情況發現自己在那裏你使用一個數組作爲鏈表(插入/刪除在中間),然後再嘗試SPL雙向鏈表中的一個。

  • 如果您發現自己使用大型索引數組,請嘗試使用SPLFixedArray。他們一定會消耗更少的內存。

  • 如果您需要將對象映射爲關鍵字,請使用SplObjectStorage(因爲PHP數組不能用於對象鍵)。

  • 如果你想保持數據排序在數組中,請嘗試其中一個堆。

基準本地數組對比SPL對象,並使用哪一個具有適合您的內存+速度+簡單折衷。

+1

+1,但我會對我說,我總是傾向於本地php數組,因爲它們具有出色的語言集成,並且可以使用所有php的精彩數組函數。通常,spl在PHP中感覺像是一種不適合。 – goat 2012-07-14 23:59:37

+0

我同意這些數據結構傾向於伸出拇指。我通常只在處理大量數據時使用它們(即使這樣,PHP不是我的第一選擇語言),或者當我需要通過引用傳遞數組時。 – Matthew 2012-07-15 01:14:00

相關問題