簡體   English   中英

如何從另一個類訪問對象?

[英]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;
    }
}

你可能想要一個單身人士 這為您提供了一種在代碼中的任何位置獲取 DB 實例的方法。 然后在任何你想做查詢的地方,首先做$db = DB::getInstance(); .

另一種方法是依賴注入,它將一個數據庫實例傳遞給所有需要一個的類。

在您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM