在类中使用全局变量
在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中文网其他相关文章!