PHP的PDO功能和DAO pattern怎么混合?我应该有一个抽象类来初始化与数据库的连接吗?可以将PDO视为等同于Java的JDBC?结合PDO和DAO模式
3
A
回答
2
PHP的PDO功能和DAO模式如何混合?
只需使用pdo来查询您的dao对象。
class PersonDAO {
function get($id) {
//> EXECUTE HERE PDO
}
}
此外,PDO已经抽象了连接,所以您不需要抽象类进行连接。
6
是的,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();
相关问题
- 1. PDO和多模式
- 2. DAO模式 - 交易在哪里适合?
- 3. DAO模式和模型对象
- 4. 正确方法:DAO设计模式的PHP + PDO
- 5. 使用DAO模式
- 6. DAO模式多表
- 7. DAO设计模式
- 8. DAO和DP模式有什么区别?
- 9. DAO和服务层的设计模式
- 10. Android - 使用Dao模式和contentProvider
- 11. 和DAO得墨忒耳定律模式
- 12. PDO结果和枝条模板库
- 13. Objective-C中的DAO模式?
- 14. DAO模式多线程
- 15. DAO设计模式界面
- 16. Groovy和GWT:结合两种模式
- 17. PDO布尔模式
- 18. IntentService并结合模式
- 19. 结合模式效率
- 20. DAO包结构
- 21. 库MySQLi到PDO结合参数
- 22. 问题与PDO结合/执行
- 23. 混合decrator模式和工厂模式
- 24. 结合VLOOKUP和IF公式
- 25. DAO设计和数据结构
- 26. DAO模式+ JNDI datasouce + CDI与MyBatis
- 27. 通用DAO模式:查找道由
- 28. Java DAO模式多表原子事务
- 29. 使用多个数据库(DAO模式)
- 30. 在Android项目上实现DAO模式
你会怎么做可以让你说你需要加入一个用户到额外的表来获得更多的信息,你会创建一个代理类,如用户,有方法来运行更复杂的查询,或者我猜如果你想要拉回所有用户,而不是一个更简单的? – nagates 2012-05-05 16:51:11
@NateGates通过应用DAO模式,您可以为User创建相应的类,并拥有诸如getAllUsers,getUsersByLoginDate或getUsersByIP等方法。 – 2012-09-29 04:40:34