Как получить доступ к объекту из другого класса?

У меня есть класс базы данных, который используется для выбора, обновления, удаления запросов 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 недоступен.