2015-05-06 53 views
1

我有一個關於PHP OOP最佳實踐的問題,涉及方法中使用的全局變量。我知道我在做什麼是不正確的,但我不確定應該怎麼做。對象中全局變量的最佳實踐-php

我們正在使用這個數據庫類:https://github.com/joshcam/PHP-MySQLi-Database-Class/blob/master/MysqliDb.php

我們創建所需的每一頁上用下面的代碼行config.php文件的對象。 $db = new MysqliDb(host,user,pwd,dbname);

但是,如果我們希望訪問數據庫,我們所有類中的每個方法都必須使用global $db。這是不好的做法嗎?如果是這樣,應該怎麼做? 我們班的所有應該擴展數據庫類(MysqlDb)嗎?

非常感謝您的幫助!

+0

我不確定它是否適用於您的情況,但可以通過PHP類型Hinting將$ db對象作爲參數傳遞給另一個類的構造函數/函數:http://stackoverflow.com/questions/5724677/PHP的型暗示到原始值。使用這個,你可以聲明$ db作爲其他類的私有變量/對象,並通過這些類的構造函數啓動它。然後,這些類的所有函數都可以訪問$ db對象,而無需在每個函數/方法中將其聲明爲全局變量。 – Maximus2012

+4

將$ db注入到所有類的構造函數中,並將其設置爲該類的一個屬性,以便它可用於所有方法(依賴注入) –

+0

@MarkBaker您認爲我的評論指出了與您的建議相同的內容嗎?我自己並不十分清楚依賴注入的概念。我們在談論同樣的事情嗎? – Maximus2012

回答

0

mysqli-db有一個MysqliDb::getInstance()靜態調用來獲取初始化對象。所以你在config.php中用new()初始化它,然後用MysqliDb::getInstance()來獲得一個對象。