Использование глобальных переменных внутри класса
Создание функции нумерации страниц предполагает доступ к объекту базы данных из класса. Однако попытка доступа к внешней переменной внутри класса может привести к ошибкам. Давайте углубимся в возможные решения этой проблемы.
Чтобы устранить фатальную ошибку «Вызов функции-члена 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); } }
Это обеспечивает большую гибкость, когда несколько методов имеют разные требования к базе данных.
Преимущества внедрения зависимостей
По сравнению с использованием глобальных переменных, внедрение зависимостей предлагает несколько преимуществ:
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3