2013-11-29 5 views
3

Я немного смущен: синглтоны плохие, глобальные худшие. Итак, какова наилучшая практика совместного использования объекта, например PDO-соединения, между разными классами?Где я должен хранить соединение PDO?

Я хотел бы, чтобы такое же соединение db использовалось классом HTML-шаблона, классом ACL и т. Д.

Я знаю, что новая тенденция заключается в использовании DI, но что является лучшей практикой для того, чтобы сделать одно и то же соединение PDO глобальным? Возможно, с помощью реестра? Или, установив его как статический var?

EDIT: Как насчет этого решения?

class Connection { 

    protected static $instance; 

    static function init(\PDO $connection) { 
     if(isset(self::$instance)) 
      throw new \Exception('A connection to a database has already been set.'); 

     self::$instance = $connection; 
    } 

    static function exec($query) { 
     return self::$instance->exec($query); 
    } 
} 

Connection::init(new PDO('blahblah')); 

Connection::exec('SELECT * FROM users;'); 
+2

Я бы сказал, что это прагматично. Используйте одиночный или статический реестр, если хотите. Это не похоже на то, что вы будете [атакованы свирепыми велоцирапторами] (http://xkcd.com/292/) – Phil

+0

В этом месяце было довольно хорошее обсуждение темы [здесь] (http://stackoverflow.com/ вопросы/19848384/PHP-PDO-экземпляр, как частно-статическое-свойство). Может стоить ваше чтение – Phil

+0

спасибо Фил, я просто хочу развиваться :) Я собираюсь отказаться от одиночных игр, и, поскольку я переписываю код, я хотел бы сделать это наилучшим образом. – user3047990

ответ

1

Лучшей практикой является создание вашего экземпляра PDO, а затем его ввод в ваш класс. Таким образом, вам не нужно определять в своем классе, как подключиться к вашей базе данных.

class Something { 
    /** @var \PDO */ 
    var $pdo; 

    public function __construct(\PDO $pdo) { 
     $this->pdo = $pdo; 
    } 
} 

$class = new \Something($mypdo); 
+0

Проблема (как всегда с этими типами вопросов) держит этот экземпляр PDO в области – Phil

+0

, это DI, у меня есть некоторые проблемы с его использованием в моем приложении, мне нужно другое решение, или мне нужно переписать его с нуля. – user3047990

Смежные вопросы