首頁 >資料庫 >mysql教程 >如何使用依賴注入避免「在非物件上呼叫成員函數 query()」錯誤?

如何使用依賴注入避免「在非物件上呼叫成員函數 query()」錯誤?

Patricia Arquette
Patricia Arquette原創
2025-01-18 00:23:11918瀏覽

How to Avoid

避免類別方法中的全域變數:分頁範例

建立分頁功能時,您可能會遇到錯誤「呼叫非物件上的成員函數 query()」。這通常源自於從類別本身內部存取類別外部聲明的變數。 讓我們探索更好的解決方案。

依賴注入:首選方法

依賴注入提供了一個乾淨的解決方案。 我們不依賴全域變量,而是將必要的物件(如資料庫連接)直接傳遞給類別。 這是透過建構函式完成的:

<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // Database connection
include_once("pagi.php");

$pagination = new Paginator($db);
$records = $pagination->get_records("SELECT the, fields, you, want, to retrieve 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);
    }
}</code>

方法注入:替代方案

或者,您可以將資料庫物件直接注入到需要它的方法中:

<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // Database connection
include_once("pagi.php");

$pagination = new Paginator();
$records = $pagination->get_records("SELECT the, fields, you, want, to retrieve FROM `table`", $db);

class Paginator {
    public function get_records($q, DB_MySQL $db) {
        $x = $db->query($q);
        return $db->fetch($x);
    }
}</code>

為什麼依賴注入比較優越

依賴注入比使用全域變數具有顯著的優勢:

  • 明確依賴:程式碼清楚地展示了每個類別所依賴的內容,提高了可讀性和可維護性。
  • 鬆散耦合:類別沒有與特定實現緊密綁定。 您可以輕鬆交換資料庫系統或其他依賴項,而無需更改核心類邏輯。
  • 可測試性:單元測試變得更簡單。 您可以在測試期間輕鬆模擬依賴關係,隔離被測類別。

總之,依賴注入是管理依賴項和共享資源、促進更乾淨、更健壯和可測試的程式碼的最佳實踐。 採用這種方法可以避免全域變數的陷阱。

以上是如何使用依賴注入避免「在非物件上呼叫成員函數 query()」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn