我一直在努力轉向PHP中的OOP。我有閱讀php.net解釋,但我希望我可以在這裏得到一些具體的答案。如何在PHP中構造類
我試着創建下面的例子來說明我的問題。假設我有「數據庫」,「產品」和「用戶」類,並且我想在用戶有權訪問時顯示產品。因此,我調用「產品」類「showProducts()」函數,該函數依次創建「用戶」類的實例,該實例創建「數據庫」對象的實例並檢查用戶訪問級別。
如果用戶有權訪問,則「showProducts()」函數會創建「數據庫」對象的另一個實例,並查詢數據庫。
class Database{
public function query(){
//runs query here
}
public function __construct() {
//sets up connection here
}
}
class User{
public function checkAccess(){
$db = new Database();
$db->query(//pass in query to check access)
//does stuff, then returns true or false
}
}
class Products{
public function showProducts(){
$user = new User();
if($user->checkAccess())
$db = new Database();
$db->query(//pass in query to get products)
}
}
我希望有人能說明如何以正確的方式做到這一點。
我想有某種控制器類的,創建一個「數據庫」對象,即提供給所有需要訪問它的類,而無需創建「數據庫」對象的多個實例。我希望用戶類具有相同的功能,因此有一個$ users用戶可以訪問所有類,而無需在每次需要使用「用戶」類時都創建新對象。
我很抱歉如果我的問題不清楚,並且預先感謝任何回覆!
感謝大家的回覆!
非常感謝您的回覆!因此,如果我有另一個在用戶類上引用的類,我還會將$ user對象作爲參數傳遞給它? – Ben
是的,你可以!你可以通過儘可能多的類,只要你喜歡。如果對象真的需要該對象來工作,則可以通過構造函數傳遞對象。如果object是可選的,你可以通過setter方法傳遞它。一旦你得到了複雜的依賴關係,那麼你可以考慮使用依賴注入容器來描述依賴關係,而Container將能夠從其他對象組裝對象並將其返回給你:)你可以在這裏閱讀更多關於依賴注入和依賴注入容器:http://fabien.potencier.org/article/12/do-you-need-a-dependency-injection-container – otporan