2015-10-10 38 views
-1

因此,我認爲打印對象列表的常用方法是擁有一些Collection類或返回要列出對象的ID的對象,然後爲每個ID啓動一個對象,然後列出它們。OOP中的對象的大型列表?

這真的是最好的方法嗎? 這意味着在後臺執行一個數據庫查詢以獲取ID,然後在啓動時爲每個對象執行其他數據庫查詢。

當然,使用小列表時這沒有問題。但是在大型列表中,這意味着數據庫負載很重,不是嗎?

有沒有更好的方法來做到這一點?

(我希望這不是一個愚蠢的問題......而新OOP)

編輯:

好了,對不起,如果這還不夠清楚。 (也許是因爲我接近這一切都是錯誤的) 假設我有一張桌子和我所有的產品。現在我想將它們全部列出來......但是在將產品屬性輸出到列表之前,我需要進行一些數據轉換。該數據轉換(通常)由產品對象處理。

愚蠢的例子:

$product->replaceBadWordsInDescription(); 

現在,爲了能在我的名單使用這些功能,我需要有一個產品對象實例列表中的每一件產品,對不對?

我認爲flyweight模式可能是一種方式。我會讀到它。

2ND編輯:

我試圖減少我的問題是具體的。 (使用列表示例)但通常,在處理同一類的許多對象時,是否最好啓動每個對象並使用它的構造函數(或工廠)來從DB填充它的屬性,還是有更好的方法?

讓一個查詢返回我們想要創建的所有對象的所有屬性,然後將它們傳遞給對象初始化是不是會消耗更少的資源? (如果我理解正確的話,這是輕量級模式的想法)

+0

試試這個:http://www.sitepoint.com/php-data-structures-1/ – marmeladze

+1

你寫的第一句話並不是真的正確。你在談論通常的方式。通常的方式你在哪裏讀過關於通常的方式?你可以很容易地查詢數據庫,使用'join'和不知道如何獲得你想要使用的數據集,你在PHP中表示爲一系列對象(爲了便於使用它們)。您提到的數據庫負載過於模糊,數據庫可以處理很多**。沒有代碼,沒有實際的問題 - 所剩下的只是推測,而這不是這個網站的內容。請提供一些代碼,以便我們可以正常進行。 –

+1

「但在大型列表中,這意味着數據庫負載很重,不是嗎?」 - 如果你真的產生了沉重的負擔,你肯定應該擔心客戶誰必須下載大量的html數據而不是數據庫... –

回答

2

不要認爲這是一個答案,將超過暗示什麼考慮

如果你只想數據的打印列表,爲什麼使用對象?

讓你的ObjectsClass方法準備數據或只是getter/setter?

主題:https://en.wikipedia.org/wiki/Flyweight_pattern

爲什麼拉第一ID的列表,然後拉各IDS從DB數據?

主題:http://php.net/manual/de/mysqlinfo.concepts.buffering.php

在PHP中你不需要任何行動[就像從DB獲得同一平衡的數據並打印]對象。

我想要嘗試什麼,也可以從無緩衝 MySQL查詢中取數據。

希望能有所幫助。

如果不是,你必須解釋更多關於你真正想做的事情!

編輯:

該數據變換(通常)由產品對象處理。愚蠢的例子:\ $ product-> replaceBadWordsInDescription(); 現在,爲了能夠在我的列表中使用這些函數,我需要爲列表中的每個產品>產品對象實例,對嗎?

不是真的,你可以讓一個Object做轉換。並給出了從數據庫讀取數據到對象的方法,如:

$prepared_row = $productTransformator->replaceBadWordsInDescription($fetched_row); 

返回prepared_row然後可以沒有方法的輕量級對象實例!

爲什麼,如果你的產品對象有很多方法,你將會有大量的內存useage和進程來創建foreach行沉重的對象實例。

所以使兩類:

一說準備給定的數據(Transformator實例)和一個只保存數據(飛錘實例),沒有任何方法。

但我只是處理數據爲數組和工作與對象在這裏,Transformator實例。

希望給一個方向:)

而且保持它的簡單和正確的:輕量級在我的例子只是意味着在實例中沒有方法。

+0

我不會讓你失望,但你真的寫了很多,一些正確,一些錯誤..我可以建議刪除答案,直到OP解釋他的問題清楚,以便給出適當的答案嗎?這樣,你實際上可以說服一個正在學習編碼的無辜的人認爲php是無狀態的,但實際上它是一種通用編程語言:/ –

+0

好的,將刪除**狀態的部分**。但是句子**所以我認爲打印對象列表的常用方法.. **在我看來並沒有真正解釋PHP代碼應該在這裏做什麼!在PHP中,您可以逐行從數據庫獲取數據並直接打印。 – statelessMind

+1

你是對的,OP沒有給我們提供足夠的信息來幫助他。我認爲唯一的事情是等待更多信息或忘記這個問題。 –