结合 PDO 和 DAO 模式

发布于 2024-11-13 21:38:11 字数 151 浏览 4 评论 0原文

PHP 的 PDO 功能和 DAO 模式 如何混合?我应该有一个抽象类来初始化与数据库的连接吗? PDO可以被认为等同于Java的JDBC吗?

How could PHP's PDO feature and the DAO pattern be mixed? Should I have an abstract class that initializes a connection to the database? Can PDO be considered as equivalent to Java's JDBC?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

飞烟轻若梦 2024-11-20 21:38:11

是的,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();

Yes, PDO is pretty much the "equivalent" of JDBC but in PHP.

You should pass an instance of PDO in the constructor of your domain objects (dependency injection):

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;
}

Then:

$pdo = new PDO('mysql:dbname=foobar');
$user = new User($pdo);
$user->name = 'netcoder';
$user->save();

You could also add a static method in Object to specify a default instance:

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();
听不够的曲调 2024-11-20 21:38:11

如何将 PHP 的 PDO 功能和 DAO 模式混合在一起?

只需使用 pdo 来查询您的 dao 对象即可。

class PersonDAO {

   function get($id) {
     //> EXECUTE HERE PDO
   }

}

此外,PDO 已经抽象了连接,因此您不需要用于连接的抽象类。

How could PHP's PDO feature and the DAO pattern be mixed?

Just use pdo to make queries into your dao object.

class PersonDAO {

   function get($id) {
     //> EXECUTE HERE PDO
   }

}

Also PDO already abstracts the connection, so you don't need an abstract class for connection.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文