您可以使用依賴注入 - 構造注入,例如,
class User
{
/**
* @var Database
*/
protected $db;
public function __construct(Database $database)
{
$this->db = $database;
}
public function view($username)
{
$user = $this->db->findFirst('User', 'username', $username);
}
}
$database = new Database(/* ... */);
$user = new User($database);
關於評論的問題:是的,這是可能的。讓我們考慮一些基本(抽象)類,它可以用作所有應共享相同基本邏輯(例如連接到數據庫或至少注入數據庫連接)的類的父級。
這種抽象類可以是:
class DBObject
{
/**
* @var Database
*/
protected $db;
public function __construct(Database $db)
{
$this->db = $db;
}
}
然後我們User
類可以以這種方式擴展這個抽象類:
class User extends DBObject
{
public function view($username)
{
$user = $this->db->findFirst('User', 'username', $username);
}
}
請記住,雖然抽象類可以實現__construct()
功能,它不能被直接實例化。然後在代碼中的某處你可以做與第一個例子非常相似:
$database = new Database(/* ... */);
$user = new User($database);
$post = new Post($database);
有沒有辦法依賴注入來說,一個Main類,然後從那裏擴展User類? – ablshd
我不知道我明白你的意思...你能更具體嗎? – shadyyx
因此,例如說我有一個用戶類,一個職位類,一個頁面類等需要訪問數據庫類。有沒有什麼辦法可以創建一個「傘」類,以便我可以擴展其他類,以便他們可以訪問數據庫,而不是單獨構建每個數據庫對象? – ablshd