PHP Framework War


!Cautious! Programming Term Ahead! @_@

哈哈,我不是很Geek,只是机缘巧合下用过许多framework,想写写心得。再说一次,我不是Geek,更不是功力深厚得高手。浅尝辄止,所以不要和我来framework war,我不会回复的 ^^

php framework war 随处可见,我去过的公司都有发生的事,我都参与,但每次的代表framework都不一样,哈哈。不止工作,php论坛,博客里,常常争个不休,比武厅外,又许多高手不满当今所有的framework,闭门造车,忽然间booom的一下,又出了一个framework来

php为什么有framework war? asp, c#, objective c, java, python, ruby 就没有?因为他们都只有一个framework. asp 死了,复活后和 C# 一起 就变成 ASP DOTNET, objective c 就 Cocoa, python 就 DJango, then 最出色的还是 Ruby on Rails. 而。。PHP 有数不尽的fw… 本来兴致勃勃,打算干干净净的写出一个网站,写着写着,改着改着,OOP,ORM,REST,i18n,MVC,啊啊啊!又写出了一个新fw!!哈哈哈!!

如果你知道php,你知道php很帅很强大很自由,什么事都好办(除了function naming比较没有条例,规划比较差以外,基本上就是无所不能)。这样动态大的语言本身存在的问题就是,没有规划。但是优点却是最符合web development 要求的,Agile development 模式。ROR可以那么火红就是因为Agile Development的概念。不过php agile是agile但称不上什么development不development的,因为它只是一堆很方便什么方法都有的语言。如果程序变大了,扩展了。问题就是要怎么让整个project比较一致性的scale了。

PHP scale不是问题,越没有framework越好scale,但是规格确实最大的问题。。为什么呢?你总不能让同样的programmer和你公司奋斗几十年吧?人一定会换的,新人来了,看到了一堆乱代码,除非它看代码像看小说一样,我没话说,不过大数人都会选择。。重写吧。。。反正,php重写很快的,最多给我两个星期。。接下来,你从新看这一段吧。。我不重复了。。哈哈

所以为了补足,单单语言孤军奋斗的php,许多高手就为它写了framework,起初许多都是模仿其他成熟的framework来写,写着写着,终于有比较属于php自己个性的framework出现了。毕竟,他们的平台不同,工作兴致不同,功能不同,性格也不同。哈哈。

我用过的framework有哪些?zf zend, cakephp, yii, doophp, code igniter 不多,就这几个,除了这些,没有名的还用过几个,自己也尝试写过几个。。有机会我还想试试用 symphony,kohana 现在就分别来说我对它们个别的感受。

首先说说 doophp,我尝试doophp因为它是马来西亚一个还比我年轻的小伙子 darkredz 写的,算是马来西亚人的骄傲吧?而且已经是国际性的framework了,它的卖点就是快,没错的话是apache benchmark里rpm最高的。除此之外,强调 REST,KISS, Ajax, 还有 它自己的ORM也挺特色。能不能成为你的归属这个我不敢说,不过有时间有兴趣的人可以上官网,下载研究研究。老实说,我并没有摸透doophp,所以也不好说什么。

接下来说说 zendframework,zend是php最大company,framework的支持也是非常大规模的。基本上是应有尽有。虽然门槛很高,不容易学,更不可能精通,但是入门来说,是很不错的磨练,可以学到许多严格古典的方法,好像学校里学的理论那样。我对zf 不好的感觉其实和 DOTNET一样,感觉它们的 form 让我觉得很约束,又大又不好使用,好像比较大的framework都存在这样的问题,Symphony论坛上也有人那么说。总之在ajax上,validation等等会比较复杂,东西还是能做得到,但是不会是那么直观的。方法上可能是最正确的,但是对于比较喜欢agile的我来说,我不喜欢正确的东西,我喜欢实用,而我在web context上的实用意思就是,快准效率高。嗯。。所以,DOTNET做应用程序,PHP做网站,还是我觉得比较适合的工具,ZF嘛,就让它继续成为老大,做个楷模好了。

现在说cakephp。我刚说zf很大,但是并不代表zf很慢,大和慢是两回事,optimization 的可行和component的多少,和 scalability都要分开来考量。但是 cakephp就是我和几位朋友,高手,老板们都搞不明白的。慢。听说是为了php4 compliance,也因为它年龄很大了,有很多很老旧的code的砘聚吗?这个我不确定,不过cakephp的execution flow我真的很怀疑。render()不是真的render,因为它们要实现 afterRender这个功能。这样类似的问题很多,也让我觉得很头痛,太过高深,遇到错时百思不解,有时候只是因为component少了一句东西或多了一句东西,让我翻了三四个小时。不过。说好的。cakephp是我用过最容易学的framework,齐备的文档和例子,class的规划命名工整,ORM也是超级容易上手的,许多好用的component,helper,element 还可以自己写很多reusable的东西。而且很好管理。但是就在一天,上千个request进入到我们的网站,让我们server跨了又跨,我们忙了好几个星期,学会了好多功课以后,我们决定搬家,和cake说byebye了。太肥了你!不过还是要谢谢你,教会了我从来就不想学的 ORM

Code Igniter 没什么好说,就是一个简单的framework,曾经我都不叫它做framework,因为它和php没什么两样的,就是有library而已,曾经同事kun问我,你知道framework和library的差别吗?library是我们code call它,而framework是framework call我们写的code,嗯。。很漂亮的答案,它就是那么的强,知道的东西真多。我认为framework就是一个culture,要我们跟随的。可是code igniter就没有这样的约束。或说很少吧。我不知道现在如何,不过曾经它都没有ORM,很多人不能接受没有ORM,认为framework最重要是MVC,接下来就是ORM了。不过,我觉得看需要吧。如果一个人敏捷开发需要MVC来干嘛?如果确定了不会换database的SQL高手,ORM还真累赘。所以,就php方面来说,我觉得Code Igniter很中恳。我不会拿来用,不过我却能认可它的定位和价值。

最后说说Yii,我接触yii时间很短,只有两个星期。yii的初期文本很好,深入的还有点缺乏,不过framework flow,folder structure,naming method 我都超爱的,它有很现代很先进的概念。configuration file能做很多事情,debug 用的 index file不同,所以要多少个development environment都可以。真是先进,完美的解决了许多configuration的问题,symphony也是那样的做法。Yii也很轻量,速度很快。一个blog front page的bench mark几乎是cakephp的hello word 那样,而且benchmark的结果很稳定,支持不同level的caching,loading方面的scalability可以绝对放心,再按上了APC应该可以应付很多海啸了。我比较不爽的的是widget,它的widget还加了jquery ajax validation。。。太讨厌了。。。我觉得framework不应该有这样的东西,虽然它已经把它尽量放到framework之外了。不过。。我还是在用。。。因为实在是太方便了。。orz

这样看来,我很明显的爱上了yii,也好像在推销yii。。。不过,因该没推错啦。看了许多评测都说它很好,用起来了就觉得,嗯,嗯很舒服。经过了上次的tsunami之后的framework war,本来执意要native php 从写的marvin天才最后用code igniter,经验丰富的kun则选择了symphony,他和我说了许多symphony很强大的地方,我在yii很多方面也看到了影子。我也没特别喜欢哪个啦,觉得都很棒啦,煮什么菜就用什么刀吧!哎,没有绝对,只有不断学习。大家 phper 们。努力啊!

哈哈。see you at the top

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s