Объединение PDO и DAO - PullRequest
       21

Объединение PDO и DAO

3 голосов
/ 04 июня 2011

Как можно смешать функцию PHP PDO и шаблон DAO ?Должен ли я иметь абстрактный класс, который инициализирует соединение с базой данных?Можно ли считать PDO эквивалентом JDBC Java?

Ответы [ 2 ]

6 голосов
/ 04 июня 2011

Да, PDO в значительной степени является "эквивалентом" JDBC, но в PHP.

Вы должны передать экземпляр PDO в конструктор объектов вашего домена (внедрение зависимости):

abstract class Object {
    protected $_pdo;

    protected $_target;

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

    public function load($id) {
        // $this->_pdo->something()
    }

    public function save() {
        // $this->_pdo->something()
    }

    public function delete() {
        // $this->_pdo->something()
    }
}

class User extends Object {
    protected $_target = 'user_table';

    public $name;
}

Тогда:

$pdo = new PDO('mysql:dbname=foobar');
$user = new User($pdo);
$user->name = 'netcoder';
$user->save();

Вы также можете добавить статический метод в Object, чтобы указать экземпляр по умолчанию:

class Object {
    // ...

    static protected $_defaultPDO;

    static public function setDefaultPDO(PDO $pdo) {
        self::$_defaultPDO = $pdo;
    }

    public function __construct(PDO $pdo = null) {
        if (!isset($pdo)) $pdo = self::$_defaultPDO;
        if (!isset($pdo))
            throw new DomainException('No default PDO object defined');

        $this->_pdo = $pdo;
    }
}

Object::setDefaultPDO(new PDO('mysql:dbname=foobar'));
$user = new User;
$user->name = 'James P.';
$user->save();
3 голосов
/ 04 июня 2011

Как можно смешивать функцию PDO в PHP и шаблон DAO?

Просто используйте pdo для выполнения запросов к вашему объекту dao.

class PersonDAO {

   function get($id) {
     //> EXECUTE HERE PDO
   }

}

Также PDO уже абстрагирует соединение, поэтому вам не нужен абстрактный класс для соединения.

...