Home > Backend Development > PHP Tutorial > PHP框架里面如何理解DAO (Data Access Object)层??

PHP框架里面如何理解DAO (Data Access Object)层??

WBOY
Release: 2016-06-06 20:40:55
Original
965 people have browsed it

PHP框架里面如何理解DAO (Data Access Object)层??

回复内容:

PHP框架里面如何理解DAO (Data Access Object)层??

这个是非DAO的代码

<code>$db = mysql_connect(...);
$query = mysql_query('SELECT * FROM user WHERE uid=123', $db);
while($line = mysql_fetch_array($query)) {
  //xxx
}
</code>
Copy after login

这个是DAO的代码(对,PDO其实就是典型的DAO)

<code>$db = new PDO('mysql...');
$query = $db->prepare('SELECT * FROM user WHERE uid = :uid');
$query->execute(['uid' => 123]);
$result = $query->fetchAll();
</code>
Copy after login

这是另一种DAO的代码,嗯,比PDO好看一点而已

<code>$db = new NotORM(new PDO('mysql...'));
$result = $db->user->select('*')->where('uid = ?', 123);
foreach($result as $row) {
  //...
}
</code>
Copy after login

最后ORM的代码可能是这样的

<code>class User extends ORMClassXXX {
    public $id;
    public $name;
    public $password;
}

$result = User::getById(123);
</code>
Copy after login

DAO和ORM可以说几乎没有任何关系,唯一的关系就是大多数ORM的实现都用了DAO,仅此而已。大概就像汽车和93号汽油的关系,很多汽车都用93号汽油,但也仅此而已,汽车和汽油的形态、功能、用途全都不一样

放到PHP的环境中,由于PHP基本已经废弃了非DAO的mysql_*的访问方式,所以PDO以及DAO基本成为了业界标准,应该没有知名的PHP的ORM下面垫的不是DAO,所以可能造成了题主的困惑。但其实ORM是可以完全不用DAO实现的。打比方说写个后面是Redis的ORM之类

  1. 对数据库链接的封装(Singleton? Pool)?
    Singleton: 可以防止一个请求,创建多个数据库链接,节省资源;
    Pool:节省创建链接的时间;
  2. 对数据存取的面向对象的封装(ORM)?
    方便数据操作,对数据记录可以已对象方式进行管理
Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template