Самый чистый подход - это aggregate класс базы данных, где необходимо, injecting. Все другие подходы, такие как использование ключевого слова 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;
}
}
Использование Constructor Injection если зависимость требуется, чтобы создать действительное состояние для экземпляра. Если зависимость является необязательной или должна быть взаимозаменяемой во время выполнения, используйте Setter Injection, например.
class SomeClassUsingDb
{
protected $db;
public function setDb($db)
{
$this->db = $db;
}
}
Пример для одноплодного шаблона в PHP можно найти здесь: http://www.weberdev.com/get_example-4002.html – Zilverdistel
Чтобы сделать объект глобально доступным вам нужен только статический метод для его экземпляра , Это не должно быть Singleton. Оба являются вонючими, поэтому Injection Dependency - это путь. – Gordon