1

由于多种原因(基本上所有这些都可以归结为糟糕的管理决策),我们无法切换到 PHP5,这意味着我们可能不得不再支持 PHP4 几年。

由于我们的许多应用程序(与许多 Web 应用程序一样)都是美化的 CRUD 应用程序,并且因为我喜欢偶尔拿起家庭项目来浪费一些时间,所以我目前正在编写一个类似 ORM 的小型类,它将充当大多数基本查询(插入、更新、替换、删除等)的包装器。由于它必须支持 PHP4,PDO所以这是不可能的,所以我将不得不回退到特定于语言的函数,例如mysql_query. 因为我们使用了几个不同的系统,在各种版本(Interbase 版本 4 及更高版本、Firebird、MySQL)中,我的 ORM / Wrapper 类(不知道如何称呼它)势必会变大。

为了解决这个问题,我想到了两种可能的“解决方案”:

  • 编写一个庞大的类,switch在函数内部使用基于$database_system定义所用语言/RDBMS 的变量的语句
  • 每个 RDBMS 编写一个基类,并编写一个派生类(可能每个版本,如果它们之间的功能差异很大)。

目前我倾向于第二种选择;在我看来,它使维护变得更容易,尤其是在将新的 RDBMS 添加到支持列表时。另一方面,每个 RDBMS 都使用它自己的一组 PHP 函数,我不确定从基类继承多少。请记住,此类最终将支持排队、执行(如果支持,还可能提交)整个查询列表等功能。

鉴于这种情况,哪种方法最好?A 或 B,或者可能有一个我还没有考虑过的 C?现有类的一些示例将是完美的,不幸的是,我遇到的大多数 ORM 都依赖于(仅限 PHP5)PDO类。

4

3 回答 3

2

绝对选择您的选项 2。您的 OO 方法优于大量 switch 语句。您的基类将给您提供的不仅仅是继承常用方法。它为您提供了一个一致的接口,以后可以在您迁移到其他数据库持久性策略时用作适配器(PHP5/PDO,当管理变得有意义时?)。我什至会在 PDO 之后对您的界面进行密切建模,如果需要,PDO 甚至可以替代您自己开发的持久层。此外,如果项目中的新开发人员已经有 PDO 经验,那么他们学习持久层的学习曲线会更低。

于 2009-11-10T21:37:30.397 回答
1

我无法理解使用绝对不受支持的软件作为新软件开发基础的管理决策。对于经理来说,至少并行安装 PHP 5 的成本几乎为零。PHP 4 的唯一后果是更高的开发成本(PHP 5 的类比 PHP 4 的多,现在所有的工具都主要依赖于 PHP 5,PHP 4 的最后提醒消失了)并且使用 PHP 5 进行生产更便宜 - 你有为了自己修复 PHP 运行时中的错误,PHP 5.3 使用更少的系统资源,....)

但是,如果您真的想这样做:Pear::MDB2应该可以满足您的需求,并且兼容 PHP 4 并且非常稳定。

但我宁愿换工作……这样的决定通常不是唯一愚蠢的决定。

于 2009-11-10T21:39:10.753 回答
1

如果有人正在寻找类似的东西(我不希望如此)但是如果 - 你应该看看 xPDO。

它是 pdo 在 php4 上工作的替代方案。从未尝试过使用它 - 但我认为它应该可以工作...... http://www.xpdo.org/

于 2011-05-24T21:30:34.707 回答