最佳实践/信息:编写PHP4 ORM

时间:2009-11-10 21:30:50

标签: php orm oop php4

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

但如果你真的想这样做:Pear::MDB2应该做你需要的,并且PHP 4兼容且非常稳定。

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

答案 2 :(得分:1)

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

它是pdo在php4上运行的替代方案。 从未试图使用它 - 但我认为它应该有用...... http://www.xpdo.org/