首頁 > 後端開發 > php教程 > 存取類別中的資料庫物件時如何避免全域變數?

存取類別中的資料庫物件時如何避免全域變數?

Patricia Arquette
發布: 2024-12-22 15:00:20
原創
167 人瀏覽過

How to Avoid Global Variables When Accessing a Database Object within a Class?

在類別中使用全域變數

建立分頁功能涉及從類別中存取資料庫物件。但是,嘗試存取類別內部的外部變數可能會導致錯誤。讓我們深入研究處理此問題的可能解決方案。

為了解決致命錯誤“呼叫非物件上的成員函數 query()”,資料庫物件需要在類別中可存取。不使用全域變量,更合適的方法是將資料庫物件注入到類別或其方法中。

依賴注入

一種方法是注入資料庫物件放入類別建構子中,如下所示:

include_once("pagi.php");

$db = new DB_MySQL("localhost", "root", "", "test"); // connect to the database

$pagination = new Paginator($db);
$records = $pagination->get_records("SELECT * FROM `table`");

class Paginator
{    
    protected $db;

    public function __construct(DB_MySQL $db)
    {
        $this->db = $db;
    }

    public function get_records($q) {
        $x = $this->db->query($q);
        return $this->db->fetch($x);
    }
}
登入後複製

這允許分頁類別存取資料庫物件

方法注入

另一種選擇是將資料庫物件注入到需要它的特定方法中:

$pagination = new Paginator();
$records = $pagination->get_records("SELECT * FROM `table`", $db);

class Paginator
{
    public function get_records($q, DB_MySQL $db) {
        $x = $db->query($q);
        return $db->fetch($x);
    }
}
登入後複製

這提供了更多當多種方法具有不同的資料庫要求時的靈活性。

依賴的好處注入

與使用全域變數相比,依賴注入有幾個優點:

  • 顯式定義的依賴關係:明確哪些對象依賴其他對象,消除隱藏的依賴關係。
  • 鬆散耦合性: 該類別可以輕鬆切換到不同的或模擬的資料庫物件以進行測試。
  • 可測試性: 單元測試可以只專注於該類,而不會幹擾資料庫功能。
  • 擴充性:無需主要程式碼即可使用多個資料庫或其他框架變更。

以上是存取類別中的資料庫物件時如何避免全域變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板