Теперь я использую PDO, и у меня есть несколько классов. Каждый раз, когда я использую класс, я не всегда использую его связанные с базой данных функции. Иногда я продолжаю использовать класс, пока в конце я не смогу выполнить некоторую работу с базой данных, например, сохранить этот объект в БД.Позиция подключения pdo в php-классе
Так что я сейчас делаю что-то вроде этого:
class Something
{
protected $pdo;
function connect()
{
$this->pdo = new PDO("mysql:host=".zConfig::read('hostname').";dbname=".zConfig::read('database'), zConfig::read('username'), zConfig::read('password'));
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
/* lots of functions doing lots of non-DB things */
function saveToDB()
{ $this->connect();
$this->pdo->prepare("Some SQL that saves some stuff");
// now do some DB-related pdo work
}
}
Мой вопрос - это это разумно? Это так много из вас код?
Как я вижу, есть 3 варианта:
- То, как я это делаю - подключение к базе данных только в тех функций, связанных с базами данных. Но эти средства каждый время Я запускаю функцию, связанную с БД.
- Открыть соединение в конструкторе, в этом случае я его открываю только один раз, но и заканчиваю тем, что открываю его, даже когда он мне не нужен, поэтому я чувствую, что иногда я создаю связи для ничего.
С другой стороны, я мог бы использовать одноэлементный класс базы данных, как это:
У меня есть до трех связанных объектов на странице, а иногда я делаю, и иногда я не нужно подключаться к БД более одного раза на странице. какой дизайн безопаснее?
Что такое "DI"? Я не совсем понимаю, что вы имеете в виду. Когда будет использоваться второй фрагмент кода? Предположим, что я на странице, где я создаю объект 'Product'. И я долгое время буду использовать этот объект на странице, но в конце мне нужно его сохранить, как этот '$ product-> save();' Так, если я запустил страницу с помощью '$ p = new Продукт; $ p-> setVals (некоторые значения); ', что мне делать в конце страницы и когда я должен добавить ваш второй код с помощью' ATT_PERSISTENT'? – user961627
, что касается 'ATTR_PERSISTENT', вы можете добавить его в любом месте, не беспокойтесь об этом.Как я уже сказал, это немного похоже на сеансы, просто откройте его один раз, и он будет продолжать поддерживать атрибут соединения на вашей странице, и соединение будет завершено один раз, вы закроете страницу. Теперь DI - это сокращение от Injection Dependency. вы можете использовать его или просмотреть [this] (http://blog.ircmaxell.com/2013/01/dependency-injection-programming-with.html), чтобы получить представление. Это очень важный способ обработки соединений, которые существуют сегодня – samayo