簡體   English   中英

如何使用在該函數外部的函數內部創建的PHP對象?

[英]How to use a PHP object created inside a function outside of that function?

我正在學習PHP,並試圖圍繞PHP和OOP來思考。 我創建了此函數,以便選擇要連接的數據庫,然后創建一個對象。 然后,我想在函數外部使用該對象來運行查詢,但是我不確定如何執行此操作。 這是我得到的:

function connectToDB($database) {
    switch($database) {
        case 'DB1':
            $host = DB1_HOST;
            $user = DB1_USER;
            $pw = DB1_PW;
            $dbname = DB1_NAME;
            $port = DB1_PORT;
            break;
        case 'DB2':
            $host = DB2_HOST;
            $user = DB2_USER;
            $pw = DB2_PW;
            $dbname = DB2_NAME;
            $port = DB2_PORT;
            break;
    }

    $db = new MySQLi;
    $db->connect($host, $user, $pw, $dbname, $port);
    return $db;
}

所以我想做的就是告訴函數連接到“ DB1”或“ DB2”,創建一個MySQLi對象並為該數據庫建立數據庫連接,然后將對象($ db)還給我,以便我可以在函數之外使用它做其他事情,但是我無法弄清楚如何使$ db在此函數之外存在。

您可以這樣做:

$dbObj = connectToDB('DB1');
$dbObj->someFunction();

函數ConnectToDB()返回MySQLi的實例。 您必須將返回的實例分配給變量。 這可以通過執行以下操作來完成:

$my_object = connectToDB('DB1') //in case of DB1

然后,您可以通過以下方式簡單地調用在對象上定義的方法:

$my_object->method_to_call();

換句話說,您可以讓某個類的特定實例(MySQLi)進行某些操作,在這種情況下為method_to_call()。

您可以使用幾種方法。 只要將返回的對象分配給變量,您正在使用的那個就應該起作用。 另一種方法是在更高級別的類中的其他位置創建對象,然后在連接方法中使用object變量(此代碼可能不起作用,僅用於說明概念)。

// declare database connection variable outside of functions in class 
private $db;
...

function init() {
   ...
   $this->db = new MySQLi; // or call this inside the connection function
}

function connectToDB($database) {
   $this->db->connect($host, $user, $pw, $dbname, $port);
}

另一種方法是通過引用該函數來傳遞對象:

$db = new MySQLi;
function connectToDB($database, &$db) {
   // the & in front of the param indicates that it is passing in the original object by reference instead of making a copy in the local scope.
   $db->connect($host, $user, $pw, $dbname, $port);
   // since the object is passed in by reference, we don't need to return it
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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