2011-06-04 90 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