Самым чистым подходом было бы агрегировать класс базы данных, когда вводит его.Все другие подходы, такие как использование ключевого слова 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;
}
}