2012-06-17 82 views
6

我正在用PHP編寫一個Web API客戶端,它將CSV數據分析爲關聯數組,並且我希望在使用這些數組時保護用戶免受數據重複。寫時複製是否會防止陣列上的數據重複?

我的用戶永遠不會寫這些數組(理論上他們可以但實際上沒有意義)。

現在我的問題是......如果我的用戶將這些數組作爲參數傳遞給方法,PHP的copy-on-write機制是否可以防止數據重複或任何不明確接受對數組的引用的方法接收數組的完整副本?

回答

9

按照名稱的建議複製寫入表示在寫入內容之前不會複製變量;只要在傳遞的變量中沒有改變單個字節,PHP會自動避免不必要的重複,並且不需要使用明確的引用,這要歸功於這種機制。

This article詳細解釋了這是如何在PHP的源代碼中實現的,正如文章中的建議,使用xdebug可以很容易地檢查變量是否與函數xdebug_debug_zval沒有重複。

此外this answer這裏SO上有更多關於Copy-on-Write的內容。

1

如果您不更改它們,則陣列將不會被複制。

+1

感謝您的及時答覆,如果您有時間,我會非常感激,如果你想詳細闡述一點。接收陣列會使用指針嗎?或者你可以提供一個鏈接到更多的信息,證實你的答案? – thwd