【发布时间】:2010-12-15 05:51:48
【问题描述】:
由于多种原因(基本上,所有这些都可以归结为错误的管理决策),我们无法切换到 PHP5,这意味着我们可能需要再支持 PHP4 几年。
由于我们的许多应用程序(与许多 Web 应用程序一样)都是美化的 CRUD 应用程序,并且因为我喜欢偶尔拿起家庭项目来浪费一些时间,所以我目前正在编写一个类似 ORM 的小型应用程序将用作大多数基本查询(插入、更新、替换、删除等)的包装器的类。由于它必须支持 PHP4,PDO 是不可能的,所以我将不得不回退到语言- 特定功能,例如mysql_query。因为我们使用了几个不同的系统,所以在各种版本(Interbase 版本 4 及更高版本、Firebird、MySQL)中,我的 ORM / Wrapper 类(不知道该怎么称呼它)势必会变大。
为了解决这个问题,我想到了两种可能的“解决方案”:
- 编写一个大型类,在函数中使用
switch语句,该语句基于定义所用语言/RDBMS 的$database_system变量 - 为每个 RDBMS 编写一个基类,并编写一个派生类(可能每个版本,如果它们之间的功能差异很大)。
目前我倾向于第二种选择;在我看来,它使维护更容易,尤其是在将新的 RDBMS 添加到支持列表时。另一方面,每个 RDBMS 都使用它自己的一组 PHP 函数,我不确定从基类继承多少。请记住,此类最终将支持排队、执行(如果支持,还可能提交)整个查询列表等功能。
鉴于这种情况,哪种方法最好? A 或 B,或者可能有一个我还没有考虑过的 C?现有类的一些示例将是完美的,不幸的是,我遇到的大多数 ORM 都依赖于(仅限 PHP5)PDO 类。
【问题讨论】: