构建分页功能时,您可能会遇到错误“调用非对象上的成员函数 query()”。这通常源于从类本身内部访问类外部声明的变量。 让我们探索更好的解决方案。
依赖注入提供了一个干净的解决方案。 我们不依赖全局变量,而是将必要的对象(如数据库连接)直接传递给类。 这是通过构造函数完成的:
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // Database connection include_once("pagi.php"); $pagination = new Paginator($db); $records = $pagination->get_records("SELECT the, fields, you, want, to retrieve 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); } }</code>
或者,您可以将数据库对象直接注入到需要它的方法中:
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // Database connection include_once("pagi.php"); $pagination = new Paginator(); $records = $pagination->get_records("SELECT the, fields, you, want, to retrieve FROM `table`", $db); class Paginator { public function get_records($q, DB_MySQL $db) { $x = $db->query($q); return $db->fetch($x); } }</code>
依赖注入比使用全局变量具有显着的优势:
总之,依赖注入是管理依赖项和共享资源、促进更干净、更健壮和可测试的代码的最佳实践。 采用这种方法可以避免全局变量的陷阱。
以上是如何使用依赖注入避免'在非对象上调用成员函数 query()”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!