建立分頁功能時,您可能會遇到錯誤「呼叫非物件上的成員函數 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中文網其他相關文章!