Я немного смущен: синглтоны плохие, глобальные худшие. Итак, какова наилучшая практика совместного использования объекта, например 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;');
Я бы сказал, что это прагматично. Используйте одиночный или статический реестр, если хотите. Это не похоже на то, что вы будете [атакованы свирепыми велоцирапторами] (http://xkcd.com/292/) – Phil
В этом месяце было довольно хорошее обсуждение темы [здесь] (http://stackoverflow.com/ вопросы/19848384/PHP-PDO-экземпляр, как частно-статическое-свойство). Может стоить ваше чтение – Phil
спасибо Фил, я просто хочу развиваться :) Я собираюсь отказаться от одиночных игр, и, поскольку я переписываю код, я хотел бы сделать это наилучшим образом. – user3047990