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