在類別中使用全域變數
在PHP中,可以使用global
關鍵字從類別內部存取全域變數。但是,這可能會導致程式碼可讀性和維護性問題。請考慮以下程式碼範例:
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // 连接数据库 include_once("pagi.php"); $pagination = new pagi(); $records = $pagination->get_records("SELECT * FROM `table`");</code>
在pagi.php
文件中:
<code class="language-php">class pagi { public function get_records($q) { global $db; $x = $db->query($q); return $db->fetch($x); } }</code>
這段程式碼嘗試在get_records
方法中使用pagi
類別外部的$db
變數。但是,它會導致致命錯誤,因為全域變數無法透過->
操作符存取。
依賴注入:更好的方法
存取外部物件的一種更優方法是依賴注入。在這種方法中,外部物件作為參數傳遞給類別的建構子或方法。例如:
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // 连接数据库 include_once("pagi.php"); $pagination = new Paginator($db); $records = $pagination->get_records("SELECT the, fields, you, want, to retrieve FROM `table`");</code>
<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); } }</code>
在這種情況下,$db
物件透過建構子傳遞給Paginator
類別。這允許類別使用$db
物件執行查詢,而無需將其設定為全域變數或在類別中建立新實例。
結論
雖然使用全域變數可能很方便,但依賴注入是為類別添加外部功能的更靈活、更易於維護的方法。透過明確傳遞依賴項,您可以將類別與特定實作解耦,並使其更易於測試和維護。
以上是如何正確存取 PHP 類別中的外部物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!