哪个 PHP 框架更好是一个古老的问题,时至今日终于有了答案。
PHP 框架史话
PHP 是一种神奇的技术,可以嵌入 HTML 代码中执行。PHP 依赖这个前无古人后无来者的运行方式,成为了一门 “语言”。PHP 为 web 而生,伴随着 web 成长,她本身就是一个高度抽象的框架,所有内置函数,例如 phpinfo()
,本质上都是强大功能的一个接口。
在本身就是 web 框架的 PHP 之上,懒惰的程序员依然想干更少的活儿做到同样的功能,所以就有了积累下来的常用函数群。然后,伴随着 PHP 的进步,又有了常用类,常用库,然后又有了常用设计模式以实现更多的代码复用,最后,一个又一个的 PHP 框架就这样诞生了。
紧接着人们发现,在把 PHP 作为主要开发语言大规模使用以后,PHP 代码的可协作性又成了一个很大的问题,于是各种 “轻量级框架” 就开始出现,其中最著名的当属 CodeIgniter 了。实际上,稍微有一点规模的团队和稍微有两年经验的程序员都会有自己的 PHP 框架,这类微框架基本只解决一个核心问题:路由。因为只有这一个东西是对所有项目都通用的。
Laravel
同时,在追求开发效率的道路上,各路重型框架层出不穷,Zend Framework、CakePHP、Yii、Kohana、Symfony、Laravel,一个比一个吹得响亮,一个比一个复杂。当下,占有率和出镜率最高的当属 Laravel 了:在国外火了一段时间了,在国内的大潮正在兴起。
Laravel 可以极大地提高开发效率。
对 Laravel 感兴趣的可以看一下我写的系列教程:Laravel 4 系列入门教程【最适合中国人的Laravel教程】,目前阅读量和反响都还不错,评论里也积累了不少常见错误和解决办法,我也会第一时间回复大家的评论。
Laravel 取得今天如此之高的成就,并不是因为作者水平有多高,PHP 经验有多丰富。实际上 Laravel 的作者 Taylor Otwell 之前是一名 .NET 程序员,本科毕业后写了三年的 .NET,然后转向 PHP,创造了伟大的 Laravel。为什么?因为没有思路上的限制。PHP 从一堆可以直接调用的 function 发展而来,为了向下兼容保留了很多非常强大的函数,正是这些函数,让 PHP 熟手们跟不上 PHP 的发展潮流,无法正视并使用 PHP5 以来优秀的新思想、新特性。如今 PHP 已经在向一门通用面向对象语言进化,具备了 类与对象、命名空间、接口、抽象类 等很多高级特性,Taylor Otwell 正是使用了这些高级特性,才构造出了今天的 Laravel。
鸟哥 Laruence 目前正在做 PHP7
的 JIT
组件,还在开发中的 PHP7-JIT
已经比 HHVM
有了成倍的性能优势。这也是我没有提那几个 C 扩展框架的原因:JIT 一出,C 扩展框架的修改困难的劣势将大大超过那一点点性能优势,性能优势可能都会完全消失。让我们拭目以待!
Composer 一统天下
“Composer 一统天下的时代已经到来!” ——白岩松 (:-D)
Composer 可以看成一个 PHP 的包管理器,类似 Python 的 easy_install 和 pip,Ruby 的 gem,Node.js 的 npm,是一个强大的生态系统。关于 Composer 的详细介绍和用法可以参考我写的另一篇文章:利用 Composer 一步一步构建自己的 PHP 框架(一)——基础准备。
为 web 而生的 PHP 一直缺少一个 web 时代的包管理器,直至 Composer 横空出世。之前 PHP 框架的传递都是通过代码文件压缩包,多么辛酸。PHP 有一个官方的“扩展库” PEAR,但是入库标准极为严格,对代码的要求很高,而且传递代码的方式也是下载压缩包。:-(
Laravel 取得成功的另一个非常重要的原因就是依靠 Composer 社区。Laravel 采用了大量的第三方包,其中就有许多著名的 Symfony 基础组件。
到底哪个框架更好?
当下,但从开发效率和社区发展的角度讲,首推 Laravel
,她也完全满足题主的几点要求。
但是强大的工具都需要长时间的学习,Laravel 学起来可能没有那么容易。当然,主要原因不在 Laravel 用了多少高级特性,而在于大多数 PHP 程序员都抱着旧 PHP 的思想不肯放手。学习 Laravel 的过程就是转变思想的过程,改变写 PHP 的姿势的过程,这个过程会比较困难,但是也能够学到很多很多。
如果广义地回答这个问题,当下最强大的框架当然是 Composer,因为她不是一个框架,是一个强大的生态系统。
关于问题中的 Yii2 和 ThinkPHP
Yii2 前几天刚刚发布,号称基于 Composer,我体验了一下,跟 CodeIgniter 3 号称的基于 Composer 是一样的:把自己发布到了 Composer 社区而已。几乎没有对其他 Composer 包的依赖,还是走的以前的老路。积重难返,止步不前。再怎么大而全也是拼不过整个社区数万个小而美的。
ThinkPHP 作为国产最流行框架我以前是很支持的,后来我因为项目要求使用了一次。当我看到 A() C() D() F() G() I() L() M() N() S()
函数的时候直接吓尿了,你知道 C()
是干啥的不?控制器 Controller?缓存 Cache?不是,人家是 Config,操作配置文件的。这样设计的代码可读性基本为零。
其他框架
Codeigniter 2 with Eloquent ORM
如果你对 CodeIgniter 比较熟悉,但是已经厌烦了繁琐的 Active Record 的话,我做了一个 Codeigniter 2 with Eloquent ORM 的项目,把 Laravel 中最强大的部分 Eloquent ORM 融合到了 CodeIgniter 2.2.0 里面。详见:给 CI 插上翅膀——在 CodeIgniter 2 中使用 Laravel Eloquent ORM
TinyLara
最后,大家也可以尝试一下我使用 Composer 构建的 Laravel 的精简版: TinyLara (官方网站:http://tinylara.com/),使用了 Laravel 中最强大的部分 Eloquent ORM,其他部分保持最精简,欢迎大家尝试,提出意见和建议!
thinkphp的26个字母方法简直是醉了
#1 夜未央 · 1月17日 · 回复