簡體   English   中英

如何在課程中使用其他對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM