У меня есть класс базы данных, который используется для выбора, обновления, удаления запросов MySQL .
Теперь я хочу создать запрос MySQL внутри другого класса, но если я определяю $db = new DB();
в index.php
, я не могу использовать var $db
в другом классе. Должен ли я определять переменную $db
снова и снова, если я хочу сделать запрос? Или есть способ сделать $db
var с объектом global var?
Самый чистый подход состоял бы в том, чтобы объединить класс базы данных, где это необходимо, путем инъекции . Все другие подходы, такие как использование ключевого слова global
или использование static
методов, не говоря уже о Singleton, вносят плотную связь между вашими классами и глобальным охватом, что делает приложение сложнее тестировать и поддерживать. Просто делать
// index.php $db = new DBClass; // create your DB instance $foo = new SomeClassUsingDb($db); // inject to using class
а также
class SomeClassUsingDb { protected $db; public function __construct($db) { $this->db = $db; } }
Используйте конструкцию Injection, если требуется зависимость для создания допустимого состояния для экземпляра. Если зависимость является необязательной или должна быть взаимозаменяемой во время выполнения, используйте Setter Injection, например
class SomeClassUsingDb { protected $db; public function setDb($db) { $this->db = $db; } }
Вероятно, вам нужен синглтон . Это дает вам возможность получить экземпляр DB в любом месте кода. Затем где угодно вы хотите сделать запрос, сначала сделайте $db = DB::getInstance();
,
Альтернативой является инъекция зависимостей , которая передает экземпляр БД всем классам, которым он нужен.
Вы можете определить его как глобальный в вашем файле index.php, а в конструкторе класса также поставить $this->db &= $GLOBALS['db'];
Используйте магическую функцию __autoload()
.
Сначала сделайте свой класс базы данных одиночным . И затем в вашем новом классе вы можете сделать что-то вроде:
class myNewClass{ private $_db; public function __construct(){ $this->_db = DB::getInstance(); } }
Определите его в классе (отдельный файл PHP ). Затем требуйте его для каждого PHP-файла, в котором необходим var.
В вашем файле index.php
используйте
require_once('path_to_file_with_class.php');
Вы также можете использовать include_once
, который даст вам предупреждение вместо ошибки, если файл path_to_file_with_class.php недоступен.