如何使用在该函数之外的函数内创建的PHP对象?

时间:2013-05-30 16:30:18

标签: php 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。

3 个答案:

答案 0 :(得分:1)

你可以这样做:

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

答案 1 :(得分:0)

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

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

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

$my_object->method_to_call();

换句话说,在这种情况下,你让特定类(MySQLi)的特定实例做一些动作,method_to_call()。

答案 2 :(得分: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
}