存取 PHP 類別方法內的外部變數
嘗試從類別方法內直接存取全域變數 ($db
)(例如 get_records
類別中的 pagi
)會導致錯誤。這是由於範圍可變造成的;全域變數在類別方法中不會自動可用。 解決方案涉及將變數明確傳遞到類別中。
解:依賴注入
最好的方法是依賴注入。這涉及將必要的物件(在本例中為資料庫物件)作為參數傳遞給類別建構函數或直接傳遞給方法。這使得類別獨立於全域變量,提高了程式碼的可維護性和可測試性。
方法一:透過建構子注入
<code class="language-php">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($db); // Pass the DB object $records = $pagination->get_records("SELECT * FROM `table`");</code>
方法二:直接注入法
或者,您可以將資料庫物件直接傳遞給方法:
<code class="language-php">class Paginator { public function get_records($q, DB_MySQL $db) { $x = $db->query($q); return $db->fetch($x); } } $pagination = new Paginator(); $records = $pagination->get_records("SELECT * FROM `table`", $db); // Pass DB object to method</code>
推薦:建構子注入
雖然這兩種方法都有效,但建構函式註入(方法 1)通常是首選。它促進松耦合,使程式碼更加模組化、可測試且更易於維護。 直接方法注入(方法 2)可能會降低程式碼的可讀性並且更難重構。 盡可能避免依賴全域變數。
以上是如何在 PHP 中存取類別方法內的全域變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!