2014-01-08 52 views
0

我對OOP很新穎,所以這個問題更多的是與理論有關,而不是我的實際代碼。我目前無法訪問我的代碼,但很快會添加。調用在類之外創建的對象(內部類)PHP

我有一個'數據庫'類,它允許我創建新的PDO連接並與各種數據庫進行交互。我在創建對象時傳遞數據庫連接詳細信息,並且__construct方法使用這些值構建PDO連接。

然後,我有與數據庫如交互準備,執行各種方法等

我創造了我需要每個連接的對象,這讓我能夠通過只調用對象快速查詢我的任何數據庫和我想用的方法。

我期待創建另一個名爲'users'的類,它將允許我與用戶表進行交互。我想要添加方法,刪除&修改用戶的詳細信息。我希望使用現有的對象來查詢每個方法中的數據庫。而不是必須創建一個新的對象並傳遞它的連接細節(這樣我只需要更新我的連接細節,而不是在多個地方更新它,而不是更新它在多個地方。這是因爲我的'數據庫'對象超出了我'用戶'類的範圍。

任何人都可以告訴我如何讓這個對象在'用戶'類中可用嗎?更重要的是這是錯誤的方法,是有更好的做法嗎?

+0

閱讀「變量作用域」和「作用域分辨率」。 –

+0

依賴注入 –

回答

0

簡單的通過你的數據庫對象爲特定UserClass的對象的PARAM:

$userobject->createUser($databaseobject);

或者通過它在創建用戶對象:

$userobject = new User($databaseobject);

+0

正是我在找的東西。就像你說'簡單'一樣,非常有意義!謝謝 – user3173706

0

你可以看看讓你的數據庫類是靜態的(所以它可以從'everywhere'使用Database::Query()等來訪問等。

但是在這種情況下,使用單例更合適,您將創建數據庫類的一個實例並在所有對象中使用它。

PHP中的Google單例指南,但常見的模式是在數據庫上使用一個靜態方法到GetInstance(),這將創建一個Database的新實例,該實例尚不存在。

+0

單身幾乎總是一個糟糕的選擇:只需創建一個Database類的實例,並將它注入到正確的位置[通過構造函數或setter]。 – moonwave99

+0

@ moonwave99爲什麼它會是一個糟糕的選擇?他只會想要一個數據庫實例,並使用單例來確保? –

+1

http://stackoverflow.com/a/1020384/1073758 – moonwave99

0

你應該只需要每個數據庫一個PDO對象。

除非你打算做相當熱的東西,我懷疑你永遠不會需要多個數據庫(有多個表)。 創建一個多層數據庫處理的通用層似乎對我來說有點矯枉過正。

你現在正在做的事情是每次你想訪問同一個數據庫的任何部分時創建一個數據庫連接。

一旦您獲得了PDO DB句柄,就可以使用它來訪問數據庫的任何部分。每次您實例化一個PDO對象時,都會創建一個到同一個數據庫的新連接。

由於併發數據庫連接的數量有限,因此您無緣無故耗盡昂貴​​而稀有的資源。

所以我的建議是讓PDO對象成爲靜態類變量,並通過繼承同一個PDO對象的單個實例來構建任何訪問器類。

+0

我正在構建的站點需要訪問各種數據庫。我希望創建一個包含使用PDO的方法的類。這樣,我可以簡單地創建一個新對象,並在添加新數據庫時傳遞連接詳細信息。我希望在其他類中構建方法時調用所需的對象,如果這有意義的話? – user3173706

+0

@ user3173706由於您在控制數據庫,所以我真的不明白創建多個數據庫的重點。這將是非常昂貴的。多表是通常的方式。或者你有充分的理由不這樣做? –

+0

那麼祝你好運... –

相關問題