2011-06-04 79 views

回答

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

你會怎麼做可以讓你說你需要加入一個用戶到額外的表來獲得更多的信息,你會創建一個代理類,如用戶,有方法來運行更復雜的查詢,或者我猜如果你想要拉回所有用戶,而不是一個更簡單的? – nagates 2012-05-05 16:51:11

+1

@NateGates通過應用DAO模式,您可以爲User創建相應的類,並擁有諸如getAllUsers,getUsersByLoginDate或getUsersByIP等方法。 – 2012-09-29 04:40:34