2012-01-31 81 views
0

我目前正在購物車中使用自定義Mysql類發送查詢到數據庫。PHP OOP - Php對象擴展Mysql對象=多個Mysql連接?

在這個項目中,我打算擴展這個MySQL類爲每個對象,我會用:類別,產品,購物車。

如果我創建這樣一個類:

class Catalog_Categories extends Mysql{} 

然後又是一個這樣的:

class Catalog_Products extends Mysql{} 

使用相同的Mysql對象對DB連接這些類或他們使用2個獨立的連接?

我有點失落。

謝謝!

Carl。

+1

每個MySQL的類應代表獨立的連接,你應該寫這將只有一個MySQL實例,並提供這種情況下您Catalog_ *類靜態類。 – Vyktor 2012-01-31 01:27:23

+0

感謝您的快速幫助。非常感激! – 2012-01-31 01:28:55

回答

1

假設您在Mysql類中創建了數據庫連接,那麼您創建的任何擴展類都將創建一個新的數據庫連接。

有幾種方法來避免這種情況,例如,你可以創建你的數據庫中的一個全局連接,並通過該連接到你的類的構造函數,使它們都將使用相同的連接。

+0

非常感謝。它有助於! :) – 2012-01-31 01:36:17

2

這取決於你的Mysql類是如何寫入的。如果使用Singleton模式編寫它,它將維護一個數據庫實例。你可以把它寫成Factory模式並讓它爲每個使用它的對象生成一個新的實例。還有很多其他的模式和可能性,所有這些都取決於您希望如何工作以及如何編寫自定義Mysql類。

+0

感謝您的快速回復。 Mysql類使用_construct上的mysql_connect。那麼這意味着每個對象有1個mysql連接嗎?再次感謝:) – 2012-01-31 01:38:55

+0

對。如果你將它存儲爲一個靜態類變量,然後在構造中添加了代碼來檢查數據庫連接是否已經實例化並返回,那麼它將是單例模式並且只有一個數據庫連接實例。 – 2012-01-31 02:21:03

1

這些類是使用相同的Mysql對象在數據庫上連接還是使用2個單獨的連接?

,直到我們看到完整的代碼我們不能回答這個問題。

但是在這種情況下擴展看起來像個壞主意。如果你不能說class A is a class B - 那麼你應該更喜歡構圖而不是繼承。這意味着Catalog_Products應該具有對mysql對象的引用,但應該不對進行擴展。

爲了讓你知道什麼時候繼承是有道理的是class mysql extends database。在這種情況下,你可以「mysql是一個數據庫」,所以這裏延伸看似合理,只要database類封裝了常見的邏輯和mysql類表示更詳細的細節。

+0

嗨,這將幫助我確定。謝謝您的幫助。 :) – 2012-01-31 01:42:31