[英]How can I use a different object inside of a class?
如果我在主作用域內創建一個對象:
index.php文件:
$db = new database();
那么,如何在完全不同的類中使用同一對象呢?
ANYTHING.PHP:
class anything {
function __construct(){
$db->execute($something); # I want to use the same object from INDEX.PHP
}
}
我是否需要使$ db成為全局變量,還是有一種“更好的”更明顯的方式?
您可以使用global
來找到它:
class anything {
function __construct(){
global $db;
$db->execute($something);
}
}
或者,您可以在創建新內容時將其傳遞給:
class anything {
function __construct($db) {
$db->execute($something);
}
}
這實際上取決於什么對您最有意義。
對於數據庫,您可能需要使用Singleton模式
class anything
{
public function load($id)
{
$db = DB::getInstance();
$res = $db->query('SELECT ... FROM tablename WHERE id = '.(int)$id);
// etc...
}
}
如果您同時需要不同的數據庫連接(例如,主數據庫和論壇的數據庫),則可能需要擴展它。 然后,您將像DB::getInstance('forum');
一樣使用它DB::getInstance('forum');
並將實例存儲在關聯數組中。
您可以像這樣傳遞它作為參數
function __construct($db){
$db->execute($something);
}
然后當您實例化任何內容時,將其作為anything($db)
正如Paolo和ONi所建議的那樣,您可以在方法內部將$ db定義為global,或者將其傳遞到類的構造函數中。 傳遞它將創建對該對象的引用,因此實際上它將是相同的$ db對象。 您也可以使用$ GLOBALS數組並以這種方式引用$ db。
$GLOBALS["db"];
我假設通過include()或require()或某些類似方法以某種方式將index.php和everything.php鏈接在一起?
在Paolo的帖子中:
傳遞完之后,可以將其分配給這樣的類變量:
class anything {
var $db_obj;
function __construct($db) {
$this->db_obj = $db;
}
function getUsers() {
return $this->db_obj->execute($something);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.