Класс расширяет класс dbConnection VS, передавая переменную PDO dbConnection в конструктор класса

Раньше я расширял класс соединения Db в каждом классе, которому необходимо подключиться к базе данных. Я думаю, что это самый распространенный способ. Но, следуя этому пути, вы открываете и закрываете новое соединение в каждом экземпляре класса, который расширяет класс соединения с базой данных. В последнее время я думал, что могу создать объект pdo и передать его в конструктор класса. Таким образом, каждый экземпляр класса, которому требуется доступ к базе данных, использует одно и то же соединение. Это работает, но я не уверен, что это эффективный способ сделать это. Кроме того, у меня есть функция closeCon, которую я вызываю в конце скрипта, чтобы закрыть соединение через null и unset. Я хотел бы знать и ваше мнение по этому поводу. Заранее спасибо : )

МЕТОД 1: Новый класс расширяет класс dbConnection.

class Db {

    public $pdo;

    public function __construct($usr, $pwd, $db) {

        $this->pdo = new PDO("mysql:host=localhost;dbname=".$db.";charset=utf8", $usr, $pwd);
    }
}

class Users extends Db{

    public function __construct(){

        parent::__construct($usr, $pwd, $db);
    }
}

МЕТОД 2: подключиться к базе данных, передав переменную PDO dbConnection в конструктор нового класса.

class Db {

    public $pdo;

    public function __construct($usr, $pwd, $db) {

        $this->pdo = new PDO("mysql:host=localhost;dbname=".$db.";charset=utf8", $usr, $pwd);
    }

    public function closeCon(){

        $this->pdo = null;
        unset($this->pdo);
    }
}

class Users {

    protected $pdo;

    public function __construct($con){

        $this->pdo = $con;
    }
}

$db = new Db($usr, $pwd, $db);

$posts = new Users($db->pdo);

$db->closeCon();

person Antonis Antoniadis    schedule 14.08.2013    source источник


Ответы (3)


Нет абсолютно никакого смысла в расширении классов приложений из класса БД. Итак - план Б.

person Your Common Sense    schedule 14.08.2013

Метод 1 может быть приемлемым только в том случае, если Users является моделью. Однако этот подход обычно является плохой практикой из-за связанности, ограничений множественного наследования и т. д. И в вашем случае создается несколько подключений к базе данных.

Метод 2 является лучшим подходом из двух. Это форма внедрения зависимостей.

person Jason McCreary    schedule 14.08.2013

Хорошая работа. Это намного эффективнее, чем открывать соединение каждый раз, и вы должным образом избавляетесь от своих соединений, когда закончите.

person Lyn Headley    schedule 14.08.2013