首页 >后端开发 >php教程 >访问类中的数据库对象时如何避免全局变量?

访问类中的数据库对象时如何避免全局变量?

Patricia Arquette
Patricia Arquette原创
2024-12-22 15:00:20166浏览

How to Avoid Global Variables When Accessing a Database Object within a Class?

在类中使用全局变量

创建分页功能涉及从类中访问数据库对象。但是,尝试访问类内部的外部变量可能会导致错误。让我们深入研究处理此问题的可能解决方案。

为了解决致命错误“调用非对象上的成员函数 query()”,数据库对象需要在类中可访问。不使用全局变量,更合适的方法是将数据库对象注入到类或其方法中。

依赖注入

一种方法是注入数据库对象放入类构造函数中,如下所示:

include_once("pagi.php");

$db = new DB_MySQL("localhost", "root", "", "test"); // connect to the database

$pagination = new Paginator($db);
$records = $pagination->get_records("SELECT * FROM `table`");

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();
$records = $pagination->get_records("SELECT * FROM `table`", $db);

class Paginator
{
    public function get_records($q, DB_MySQL $db) {
        $x = $db->query($q);
        return $db->fetch($x);
    }
}

这提供了更多当多种方法具有不同的数据库要求时的灵活性。

依赖的好处注入

与使用全局变量相比,依赖注入有几个优点:

  • 显式定义的依赖关系:明确哪些对象依赖于其他对象,消除隐藏的依赖关系。
  • 松散耦合性: 该类可以轻松切换到不同的或模拟的数据库对象以进行测试。
  • 可测试性: 单元测试可以仅关注该类,而不会干扰数据库功能。
  • 扩展性:无需主要代码即可使用多个数据库或其他框架变化。

以上是访问类中的数据库对象时如何避免全局变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

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