2012-04-08 55 views
9

我已經在這裏讀亞歷傑瓦西奧出色的服務層系列:http://www.devshed.com/cp/bio/Alejandro-Gervasio/,我注意到他也是誰主張PHP集合的開發者之一,在http://www.devshed.com/c/a/PHP/PHP-Service-Layers-Handling-Entity-Collections/1/在PHP中創建集合類的目的是什麼?

這是爲什麼?爲什麼要創建一個通過使用數組來模擬簡單關聯數組的類?

+0

我曾經讀過一本關於高級php操作技巧的書,並且對此進行了詳細的討論。顯然他們這樣做是因爲它允許你使用像數組一樣的對象。 – Kristian 2012-04-08 21:13:08

+3

你可以將「php oop」縮寫爲「poop」,fyi。 – 2013-04-05 23:25:34

回答

10

我沒有閱讀文章,但我可以告訴你爲什麼我這樣做一般地講:

  1. 搜索/排序/訪問:我可以抽象搜索,過濾和訪問我想集合中沒有項目用特殊方法去db,而不依賴於單個數組鍵。
  2. 如果您可以通過Entity或EntityCollection接口進入實體管理界面,則可以更容易地插入實體管理界面 - 在這裏您也可以在集合中封裝用於在多個實體上執行操作的功能。不是說你不能在一個循環中做這個,但它可以讓你隱藏它,併爲不同的集合類做出特定的事情)。
  3. 集合序列化 - 自定義序列化(認爲選擇特定屬性)以序列化爲特定的字符串格式。
  4. 您仍然可以輕鬆支持基本訪問和迭代的數組接口。
+0

關於第1點 - 構建好的動態查詢不能完成排序和搜索嗎?另外,我通常在工具類中編寫助手函數,以便通過屬性或元素進行二維排序,然後可以從任何地方調用它們。我的意思是我看到你如何將這個抽象集合到集合類中,從我的角度來看,這只是我的開銷。你能說出點2和點3的例子嗎? – Swader 2012-04-09 12:45:13

1

如果我可以完成與我在原則2所觀察到的答案:

教義,您使用Collection界面,你不關心它是如何工作的。該界面提供了過濾,排序,...

但Doctrine提供Collection名爲PersistentCollection的實施。你甚至不知道你在使用它,因爲你使用了這個接口,但是對於這個特殊的集合,當你過濾/搜索/排序集合時,Doctrine將能夠智能和透明地進行數據庫查詢。它還將使Doctrine只有在訪問(延遲加載)時才能加載集合的內容(對象列表),這可以幫助獲得性能。

這對於一個PHP數組來說是不可能的,您將不得不從數據庫完全加載它,然後執行您的操作。

相關問題