PHP ORM 收集

Propel

http://propel.phpdb.org/

Propel是一个基于Apache Torque的对象持久层,需要PHP5支持.实际上,它让你使用 对象 代替SQL 来读写数据库表中的记录.它提供了一个生成器来创建基于你的数据模型的SQL定义文件和相应的类文件,并有一个运行时引擎透明的处理对象持久和获取工作.如果要定制生成的类将是很简单的事情,XML, PHP类 和Phing构建工具使得把Propel集成到已有的应用程序框架也相当的容易.
Propel算是PHP中对ORM的实现,并且用到它的兄弟项目Creole作为数据抽象层.

它的核心思想是:通过 XML 格式的模式文件和相应的配置文件来生成SQL和类, 在数据库抽象的基础上,  更近一步,它"隐藏"了数据库,使得WEB开发人员专注于业务逻辑上.
实践:著名PHP框架 symfony使用了精简版的Propel.
相关:PEAR DB_DataObject是另一个轻型的ORM实现,不过它的数据库抽象层使用的是 PEAR DB.

EZPDO

http://www.ezpdo.net

EZPDO 是一个轻量级的PHP ORM框架。旨在降低复杂的学习曲线,维持一个相当的运行速度和提供尽可能强大的功能。不过作者更新比较慢。好几个月才能更新一个小版本。

以下引用自官方网站 

Features  特性

Here is a quick look at the features in EZPDO before you delve into any details.

  • Minimum SQL knowledge required
  • 尽可能的SQL透明
  • Requires minimum ORM specification
  • 最小化的ORM配置
  • No Phing! No need of explicit command line compile
  • 不需要复杂的命令行操作
  • Works with existing code and database
  • 工作在已有的数据库和代码的基础上
  • Has a small runtime core to guarentee performance
  • 有一个小的运行时核心以提高性能
  • Handles 1:N, and M:N relationships automatically
  • 可以自动处理1:N,M:N 的关系
  • Provides a simple runtime API
  • 提供一个简单易懂的运行时API
  • Supports object query (EZOQL)
  • 支持对象查询(EZOQL)        注: 仿照 Hibernate 的 HQL 起的名字,貌似未完全实现
  • Auto generates database tables
  • 自动生成数据库表
  • Test-driven with continuous integration
  • 持续集成的测试驱动

 

Licence

EZPDO is an open source project and uses the BSD license.

BSD协议意味着你可以自由的使用,修改该软件源码,需要在你发布的源码包中包含BSD协议或者注明。

 ORM in Frameworks

许多开发框架都对ORM有实现。

Picora  提供了一个类 ActiveRecord 的实现,同时提供了一个缓存和序列化的实现。当前的版本是 0.4 版。

ThinkPHP 是国内鼎鼎大名的PHP开源框架之一,在模板引擎上模仿了 Struts 。它提供了名为 VO ( ValueObject )  的 ORM 实现,由于没有看过源码,从使用方式上看,它的实现和 ezpdo 有一定类似之处。

FleaPHP 是国内另外一个著名的PHP开源框架,作者廖宇雷大侠(dualface),脾气火暴。它提供了TableGateWay方式的 ORM 实现。

Zend Framework (ZF) 是 PHP 老母 Zend 公司的杰作,目前已经公布了 1.0 production 版,除了提供对 SQL 语句的封装以外,也同样实现了 TableGateway 、 TableRowSet  、 TableRow 的实现。

总结

从功能上讲,不管是 ActiveRecord 模式,还是 TableGateway ,对付简单的查询的确是可以降低开发难度,提高开发效率;但是它们对复杂关联、SQL内嵌表达式的处理都不好。另外,由于php的对象持久化功能较弱,导致ORM的速度令人不敢恭维,测试结果普遍大约比Native SQL 慢10~50倍。

在大型项目中,期望使用ORM ,但是有可能出现的复杂情况让我对 ORM 心存恐惧。如果强制使用 Pure SQL 很有可能会带来数据缓存的冲突和 ORM 内部关联的破坏。

这些让我感到很失望,RDBMS 难道果真不是为了OO设计的。没有仔细的看过Hibernate ,不知道Hibernate的处理究竟有多强,但Hibernate 那繁杂的配置文件让人望而生畏,我想这同样不是ORM的真谛。

Django 中的 Models 模型虽然功能要比 Python 中最强大的 SQLAlchemy差一些,而且写法也有些类似ZF中的db_select 但是藉于Python强大的自省功能, Django 的 Models 仍然是一个写法优美、易于使用的ORM 。粗略得想,我认为把 Django的 ORM 移植到 PHP 不会是很难的事情,但目前的我做到这点还有很大差距,所以期望有心人可以做这么一次有益的尝试。

你可能感兴趣的:(PHP)