访问 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中文网其他相关文章!