Php PDO database singleton. Какой вариант выбрать?

Как `кошерно` реализовать доступ к БД, чтобы каждый раз при обращении не создавалось новое подключение? Я вижу два варианта. Первый реализовать вот так:
1. file Database.php
<?php

class Database extends PDO
{

    function __construct()
    {
        parent::__construct('mysql:host=localhost;dbname=mydbname', username, password);
    }
}


2. файл условно index.php
<?php

require_once Database.php;

class MyClas
{


    function __construct()
    {
        $this->db = new Database();
    }

    function run()
    {
        $stmt = $this->db->prepare(....);
    }
    function callHook()
    {
        $stmt = $this->db->prepare(....);
    }
}


второй - реализовать класс Database as singleton.

Подскажите, кто давно пишет на php. Действительно ли при использовании первого варианта не будет постоянно происходить установка нового соединения. И если реализовать через singleton, как `кошерно` сделать это используя PDO. Ну или есть еще какой-то надежный и простой вариант. Спасибо.
  • Вопрос задан
  • 6629 просмотров
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
По первому варианту:
1. Зачем здесь нужен класс Database?
2. У тебя будет только один класс во всем приложении? или больше? А сколько будет коннектов после new myclass и new myclass2?

По второму.
Высоколобые не любят синглетон. Чем-то он им там с тестированием мешает. Плюс религиозная нетерпимость. Так что используй статический синглтон только если у тебя код организован в виде классического процедурногоговнокода.

Если же у тебя все в виде кошерной иерархии классов, то, как замечено в другом ответе, передавай соединение в класс, а не создавай его каждый раз заного.
function __construct($db)
    {
        $this->db = $db;
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы