Php PDO与DAO模式的结合
PHP的PDO特性和应用程序是如何混合的?我应该有一个抽象类来初始化与数据库的连接吗?PDO可以被认为等同于Java的JDBC吗 PHP的PDO特性和DAO模式如何混合 只需使用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中是如此 您应该在域对象的构造函数
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();