«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как избежать глобальных переменных при доступе к объекту базы данных внутри класса?

Как избежать глобальных переменных при доступе к объекту базы данных внутри класса?

Опубликовано 21 декабря 2024 г.
Просматривать:203

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);
    }
}

Это обеспечивает большую гибкость, когда несколько методов имеют разные требования к базе данных.

Преимущества внедрения зависимостей

По сравнению с использованием глобальных переменных, внедрение зависимостей предлагает несколько преимуществ:

  • Явное определение Зависимости: Проясняет, какие объекты зависят от других, устраняя скрытые зависимости.
  • Слабая связь: Класс может легко переключиться на другой или имитируемый объект базы данных в целях тестирования.
  • Тестируемость: Модульные тесты могут фокусироваться исключительно на классе, не вмешиваясь в базу данных. функциональность.
  • Расширяемость: Позволяет использовать несколько баз данных или других платформ без серьезных изменений кода.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3