比較|開発フレームワーク
はじめに
PHP 開発フレームワークは、最近 PHP コミュニティで話題になっており、ほぼ毎日新しいフレームワークがリリースされています。市場には 40 以上の開発フレームワークがあり、特にフレームワークによって提供される機能が異なる場合、どれが自分にとって最適であるかを判断するのは困難です。
この記事では、最も人気のある 10 の開発フレームワークを紹介し、それらを水平に比較します。まずすべてのフレームワークのリストから始めて、次に 1 つずつ簡単に説明します。
概要
以下に示すのは、これら 10 個の開発フレームワークのリストであり、それぞれが提供する機能をリストしています。
フレームワーク | PHP4 | PHP5 | MVC1 | 複数の DB2 | ORM3 | DB オブジェクト4 | テンプレート5 | キャッシング6 | 検証7 | アヤックス8 | 認証モジュール9 | モジュール10 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Zend フレームワーク | - | - | - | - | - | |||||||
ケーキPHP | - | - | ||||||||||
Symfony プロジェクト | - | - | - | |||||||||
カモメフレームワーク | - | |||||||||||
WACT | - | - | - | - | - | |||||||
プラド | - | - | - | - | ||||||||
TRAX 上の PHP | - | - | - | - | - | |||||||
ZooP フレームワーク | - | |||||||||||
eZコンポーネント | - | - | - | - | - | |||||||
コードイグナイター | - | - | - |
如果上表所列有不当之处,敬请斧正。
Zend Framework
Zend Framework还相当新,尚处在beta阶段(译者注: 相对于作者写这篇文章之时),因此还有些功能有待完整(比方说用户验证模块),但它本身已经有不少功能了。尽管从对比表上来看它没占到什么便宜,可Zend Framework确确实实涵括了一些处理PDF文档、RSS源、在线服务(Amazon, Flickr, Yahoo)的模块,甚至更多。Zend Framework同时也包含了数个不同的数据库对象,极大地便捷了对数据库进行查询的实现,甚至免去你手写SQL查询脚本的麻烦。
当前,Zend Framework并未完全支持ORM,但是开发人员仍然陷入在是否要添加ORM层的争论中。也许在将来会实现这些功能,你就可以编写自己的ORM封装包,投稿到社区,并有机会将之整合入框架的未来版本。
Zend Framework看上去前途一片光明,而且它同时又修正了一些常见的PHP问题。也许稳定版本就可以在对比表里面表现得更出色了!
CakePHP
CakePHP是一款高级的MVC框架,自带了不多的几个模块。它可以处理大多数的数据库事务,支持Ajax个数据验证。同时,它的用户验证模块(Accsee List)也非常独特,可以针对不同的用户在访问网站不同部分时分配对应的访问权限。
尽管CakePHP的网站看上去令人犯晕,但是框架本身已经比较完整可用了。截至成文尚未见稳定版本,实在令人感到有点意外,毕竟已经开发了好几个月了,不过我猜想也许用beta版本来开发产品也未尝不可吧(译者注: Risk you @ss baby!)。
Symfony Project
从对比表中不难看出,Symfony是一款极具扩展性的开发框架,它甚至完整植入了一个叫做Propel的ORM,Propel也是开源项目,并且迄今为止可能是PHP上最好的ORM解决方案。Symfony同时还整合了用于数据库抽象层的Creole和用于MVC模型层的Mojavi。由于它仅仅是重用了这些项目的源代码,而非重写,由此使得框架具备了极为强大的扩展性,这一点在表中昭然若是。
Symfony有两个缺憾,以使它不支持PHP4,这是由于需要PHP5中很多新特性的支持的结果,二是相对来说它有点复杂了。大多数任务,比方像分页,在Symfony中的时限比其他框架要复杂得多,这决不是一款简洁著称的框架。
Seagull Framework
Seagull framework看上去相当不错,自带了很多特性。支持PHP4也对它的推广相当有利,我本人就仍在使用PHP4,况且大多数空间寄存商尚未全面支持PHP5。
不幸的是,Seagull没有提供对Ajax的支持,实在有点说不过去,不过通过Google可以毫不费力地搜索到一篇自己添加Ajax支持的教程,而且这点在将来应该会添加到框架中。
WACT - Web Application Toolkit
WACT很有潜力,框架的基件它一应俱全,像MVC、数据库对象和模板引擎,不过仅此而已。它没有任何外挂模块,同时也缺少一些内建的功能,例如Ajax、缓存、验证模块,等等。
尽管如此,WACT还是拥有最好的模板引擎,甚至可以帮助你创建自己的模板标签来扩展功能。
Prado
Prado非常独特,它提供了一些很酷的特性。它没有内建对MVC的支持(就我看来),但是它确实拥有处理大多数PHP任务的各种各样的组件,更棒的是,它实现了事件驱动脚本。例如,在一个HTML按钮上设置onClick事件链接到一个PHP函数。这点近似ASP.NET,而Prado确实包含了更多的ASP.NET组件,像GridView和Repeater Control。
仅凭对比表上的数据,Prado看似要弱于其它框架,但事实并非如此。因为Prado如此独特,尽管它得分不高,但是在实际应用中它是非常强大的。
PHP on Trax
このフレームワークは単に Ruby と Rails on PHP のインターフェイスです。確かに以前は PHP on Rails と呼ばれていました。残念ながら、ドキュメントが非常に少ないため、フレームワークが何を提供するかを正確に伝えるのは困難ですが、ドキュメントには ActiveRecord について言及されているため、RoR のような ActiveRecord を提供する可能性があります。また、Ajax サポートも組み込まれており、Web サイト上の 2 つのデモ ビデオから簡単に確認できます。
Trax 上の PHP は基本的にフレームワークに対するユーザーの要件を満たすことができますが、検証モジュールやキャッシュ モジュールなどの手足がまだ不足しています。また、プラグイン モジュールも含まれていないため、現時点では非常に基本的なものです。
ZooP フレームワーク
ZooP フレームワークは包括的であると言えます。比較表から、ORM レイヤーを除いて、サポートされるべきほとんどすべてがサポートされていることは明らかです。さらに驚くべきことは、PHP4 がサポートされていることです。PHP4 が提供する包括的な機能の割には、これは非常に簡単ではありません。
ZooP には組み込みの GUI コントロールも用意されており、フォームの作成が非常に高速になります。通常の HTML で GUI コントロールを使用する利点は、検証ロジック操作を GUI コントロールと密接に組み合わせることができることです。
eZコンポーネント
ez コンポーネントはフレームワークというよりも、コンポーネントのセットであるため、MVC のサポートが組み込まれていません。
これには、データベース コンポーネントやキャッシュ コンポーネントなど、最も一般的なコンポーネントが含まれていますが、まだ欠けているものもあります。たとえば、ActiveRecord コンポーネントや検証コンポーネントはありません。一方、電子メール コンポーネントなどのいくつかのプラグイン コンポーネントは提供されますが、他のフレームワーク (Zend Framework など) ではそれ以上のプラグイン コンポーネントは提供されません。
コードイグナイター
CodeIgniter は比較的新しいフレームワークで、その作者は ExpressionEngine (翻訳者注: PHP ブログ プログラム pMachine のアップグレード製品。残念ながら無料ではありません) の開発チームであり、大きな可能性を秘めているようです。残念ながら、この機能はまだ開発中ですが、まだ複数のデータベースを処理できません。
Ruby on Rails を起源としているため、スキャフォールディング (自動コード生成) など、同じ機能の多くを提供します。ドキュメントは非常に充実しており、すぐに使い始めるのに役立つビデオチュートリアルもあります。
勝者は...
ここで、残念ながら誰も勝者がいないことを発表しなければなりません。各フレームワークは異なる機能を提供するため、完璧なフレームワークはありません。いつものように、最終的には個人の好みと選択になります。決定を下す前に各フレームワークのドキュメントを注意深く読むことを強くお勧めします。残りはご自身で判断してください。
個人的には Zend Framework がとても好きですが、各フレームワークを注意深く研究すると、Prado のイベントや Symfony の ORM パッケージなど、多くの興味深い機能を発見しました。
どのフレームワークを選択するか本当に決められない場合でも、ほとんどの人が行うこと、つまり自分で行うことを選択できます。時間と労力はかかりますが、無限に楽しいです。