我正在学习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。
答案 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
}