首页 >数据库 >mysql教程 >如何正确访问 PHP 类中的外部对象?

如何正确访问 PHP 类中的外部对象?

Susan Sarandon
Susan Sarandon原创
2025-01-18 00:10:38574浏览

How Can I Properly Access External Objects Within a PHP Class?

在类中使用全局变量

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn