Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO与DAO模式的结合_Php_Pdo_Dao - Fatal编程技术网

Php PDO与DAO模式的结合

Php PDO与DAO模式的结合,php,pdo,dao,Php,Pdo,Dao,PHP的PDO特性和应用程序是如何混合的?我应该有一个抽象类来初始化与数据库的连接吗?PDO可以被认为等同于Java的JDBC吗 PHP的PDO特性和DAO模式如何混合 只需使用pdo对dao对象进行查询 class PersonDAO { function get($id) { //> EXECUTE HERE PDO } } 而且PDO已经对连接进行了抽象,因此连接不需要抽象类。是的,PDO与JDBC非常“等价”,但在PHP中是如此 您应该在域对象的构造函数

PHP的PDO特性和应用程序是如何混合的?我应该有一个抽象类来初始化与数据库的连接吗?PDO可以被认为等同于Java的JDBC吗

PHP的PDO特性和DAO模式如何混合

只需使用pdo对dao对象进行查询

class PersonDAO {

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

}

而且PDO已经对连接进行了抽象,因此连接不需要抽象类。

是的,PDO与JDBC非常“等价”,但在PHP中是如此

您应该在域对象的构造函数中传递一个PDO实例(依赖项注入):

然后:

您还可以在
对象中添加静态方法来指定默认实例:

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();

在这种情况下,你会怎么做呢?比如说,你需要将一个用户加入到一个额外的表中以获取更多信息,你会创建一个代理类,比如Users,它有方法来运行更复杂的查询,或者我想更简单,如果你想撤回所有用户,不仅仅是一个?@NateGates应用DAO模式,您可以为用户创建一个相应的类,并拥有诸如
getAllUsers
getUsersByLoginDate
getUsersByIP
等方法。
$pdo = new PDO('mysql:dbname=foobar');
$user = new User($pdo);
$user->name = 'netcoder';
$user->save();
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();