在類別中使用全域變數
建立分頁功能涉及從類別中存取資料庫物件。但是,嘗試存取類別內部的外部變數可能會導致錯誤。讓我們深入研究處理此問題的可能解決方案。
為了解決致命錯誤“呼叫非物件上的成員函數 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中文網其他相關文章!