从PHP应用程序中抽象数据库的最佳方法是什么?

Mar*_*328 6 php database orm abstraction design-patterns

我的问题是如何从应用程序的模型层抽象数据库连接?主要关注点是能够轻松地从不同类型的数据库进行更改.也许你从一个平面文件,逗号分隔的数据库开始.然后,您想要移动到SQL数据库.然后您决定LDAP实现会更好.一个人如何轻松地计划这样的事情?

举一个简单的例子,假设您有一个名字,姓氏和电子邮件的用户.表示它的非常简单的PHP类可能如下所示(请忽略公共实例变量的问题):

<?php

class User {
  public $first;
  public $last;
  public $email;
}

?>
Run Code Online (Sandbox Code Playgroud)

我经常看到人们有一个DAO类,其中嵌入了SQL,如下所示:

<?php

class UserDAO {
  public $id;
  public $fist;
  public $last;
  public $email;

  public function create( &$db ) {
    $sql = "INSERT INTO user VALUES( '$first', '$last', '$email' )";
    $db->query( $sql );
  }
}

?>
Run Code Online (Sandbox Code Playgroud)

我这样的策略的问题是当你想要改变你的数据库时,你必须改变每个DAO类的创建,更新,加载,删除功能来处理你的新类型的数据库.即使你有一个程序为你自动生成它们(我不是特别喜欢它),你必须编辑这个程序才能使它现在正常工作.

你对如何处理这个问题有什么建议?

我目前的想法是为DAO对象创建一个超类,它有自己的创建,删除,更新,加载函数.但是,这些函数将获取DAO属性的数组并生成查询本身.通过这种方式,唯一的SQL是在SuperDAO类中,而不是分散在几个类中.然后,如果要更改数据库层,则只需更改SuperDAO类生成查询的方式.好处?缺点是什么?可预见的问题?黄金三镖客?

Ali*_*man 8

您可以使用各种框架,例如PDO,PEAR :: MDB2或Zend_Db,但老实说,在12年的PHP开发中,我从未必须从一种类型的数据存储基础架构过渡到另一种类型.

甚至从像Sqlite这样非常相似的东西到MySQL也是极为罕见的.如果你确实做得更多,那么无论如何你都会遇到更大的问题.


Ben*_*n S 7

使用ORM通常是抽象数据库的首选方式.维基百科上提供了不完整的PHP实现列表.