1

我正在学习 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 存在于这个函数之外。

4

3 回答 3

1

你可以这样做:

$dbObj = connectToDB('DB1');
$dbObj->someFunction();
于 2013-05-30T16:32:22.610 回答
0

该函数ConnectToDB()返回 MySQLi 的一个实例。您必须将返回的实例分配给一个变量。这可以通过执行以下操作来完成:

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

然后您可以通过以下方式简单地调用对象上定义的方法:

$my_object->method_to_call();

换句话说,您让某个类 (MySQLi) 的特定实例执行某些操作,在这种情况下为 method_to_call()。

于 2013-05-30T16:35:33.170 回答
0

您可以使用几种方法。只要您将返回的对象分配给变量,您正在使用的那个应该可以工作。另一种方法是在更高级别的类中的其他位置创建对象,然后在连接方法中使用对象变量(此代码可能不起作用,它只是为了说明概念)。

// 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
}
于 2013-05-30T16:44:39.723 回答