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