在类中使用全局变量
创建分页功能涉及从类中访问数据库对象。但是,尝试访问类内部的外部变量可能会导致错误。让我们深入研究处理此问题的可能解决方案。
为了解决致命错误“调用非对象上的成员函数 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中文网其他相关文章!