[英]How to access an object from another class?
我有一個數據庫類,用於進行選擇、更新、刪除MySQL查詢。
現在,我想在另一個類中創建一個 MySQL 查詢,但是如果我定義$db = new DB();
在index.php
,我不能在另一個類中使用$db
var。 如果我想進行查詢,是否必須一遍又一遍地定義變量$db
? 或者有沒有辦法用一個對象全局$db
來制作$db
var?
最干凈的方法是在需要的地方通過注入來聚合數據庫類。 所有其他方法,例如使用global
關鍵字或使用static
方法,更不用說單例了,都在您的類和全局范圍之間引入了緊密耦合,這使得應用程序更難測試和維護。 做就是了
// index.php
$db = new DBClass; // create your DB instance
$foo = new SomeClassUsingDb($db); // inject to using class
和
class SomeClassUsingDb
{
protected $db;
public function __construct($db)
{
$this->db = $db;
}
}
如果需要依賴項來為實例創建有效狀態,請使用構造函數注入。 如果依賴項是可選的或需要在運行時互換,請使用 Setter 注入,例如
class SomeClassUsingDb
{
protected $db;
public function setDb($db)
{
$this->db = $db;
}
}
在您的index.php
文件中使用
require_once('path_to_file_with_class.php');
您也可以使用include_once
,如果 'path_to_file_with_class.php' 文件不可用,它會給您一個警告而不是一個錯誤。
在一個類(單獨的PHP文件)上定義它。 然后為需要 var 的每個 PHP 文件都需要它。
首先使您的數據庫類成為單例。 然后在您的新班級中,您可以執行以下操作:
class myNewClass{
private $_db;
public function __construct(){
$this->_db = DB::getInstance();
}
}
使用魔術函數__autoload()
。
您可以在 index.php 文件中將其定義為 global,並且在類構造函數中還放置$this->db &= $GLOBALS['db'];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.