PHP的MVC框架哪一个性价比最高?yii2 还是 thinkphp

一直接触和使用的是thinkphp和codeigniter,没有用过其他的PHP MVC框架。
现在正在重构一个功能比较多的网站,但是工作时间太忙,回家时间很零散,所以需要快速完成上线。

在公司用thinkphp ci,回家里也用thinkphp来做,感觉头都快炸了,真担心全都混淆了。
所以想换一种。以前用过yii 1.x 体验不是很好,不支持命名空间,安装方法古怪。

想讨论哪一种 PHP MVC框架比较有前景(不会过一两年就散伙了)。
符合以下几个特点:

1)发行的稳定版本 支持命名空间,自动加载
2)比较出名或者流行,有很大一个使用群体
3)至少有一个正式的官网
4)性能强大,扩展性强
5)符合编程规范
6)长远角度来看,团队不会突然解散(比较看重)
7)不是小打小闹,应用很广泛。
阅读 51.3k
27 个回答

哪个 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 目前正在做 PHP7JIT 组件,还在开发中的 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,其他部分保持最精简,欢迎大家尝试,提出意见和建议!

反正我的意见是:框架功能越多,坑越多

你的需求恰好和框架一致那没问题,不一致的时候,框架功能越多封装越完善,死得越惨。这是典型的“基于巧合编程”

如果项目需求就是非常正常普罗大众的,那么干脆上wordpress drupal之类,配好合适的插件再微调就好
如果项目是有自己独立的需求或是需要长期维护&迭代的,框架功能越少越好

基于此我自己的答案是
5.3以前(无namespace,无composer)
自己写LitPHP
开源的考虑CI(功能还是偏多,上古时代没composer也没办法)

5.3以后(Composer & PSR标配)
lit的modern分支一直没思路,暂时有个Aether 小打小闹,随手用用
开源的考虑Slim

symfony绝对值得推荐,重型框架,学习有曲线但是收获也会很多,社区完善,企业级框架性能有保障,fig编码很多框架底层都用它来实现!
如果时间比较紧张且是中小型项目用tp吧,毕竟边看文档边做就可以实现的!
yii没用过不知道如何!

用过Yii 1.x,推荐Yii 2.0,不过确实要仔细看一次2的文档,说不定Yii就成了最牛逼的PHP框架了

yii是号称性能最为强劲的php框架,但是如果是用来杀鸡的话,我还是力挺thinkphp,文档超级仔细,它用起来方便不是因为它简单,是因为它的文档写的非常到位,非常符合中国人的习惯。现在国内很多中小企业都选用thinkphp,不信你到开源中国看看php语言的开源项目十个中八个就是基于thinkphp,铁打的事实毋庸置疑。

目前在用的是 Yaf 和 Yii2, 简单独立的项目用Yaf不错, 因为很简单, 集成度不高,过于臃肿的项目就算了, yii2感觉php的代码更规范了,主要喜欢代码风格

我以前也是通过很多渠道,对比了很多的框架。从CI转到TP,近年来一直钟爱YII。2.0支持命名空间,还有一整套用来简化实现RESTful风格的Web Service服务的API。真的用起来非常爽,快转过来吧,用过才知道。
1、搞PHP还是推荐YII。叼叼的小米,就是YII的框架。
2、如果不搞PHP,强力推荐ruby。36kr就是最好的证明。

选你最熟悉的框架。 Yii 和 Thinkphp 哪个熟选哪个。
Laravel 和 Symfony2 作为学习目标。如果项目不急可以用他们来倒腾。

PHP 是一种神奇的技术,可以嵌入 HTML 代码中执行。PHP 依赖这个前无古人后无来者的运行方式,成为了一门 “语言”。

这个前无古人有点夸张,后无来者就完全是嚣张了。一个经历过时间洗礼后成熟稳重的程序员对待事物的态度是不会这么武断的,就算是PHP也是集百家之长(c的函数、c++、java和c#的类和命名空间、ASP的解析方式等等)才有今天。

我还是推荐Yii2,不过我也挺喜欢Laravel的

Y是开箱即用,CRUD一生成基于bootstrap的操作界面都有了,而且深度整合Bootstrap带列筛选、排序的GridView不容小觑,直接在themeforest上买个Admin的HTML模板写后台管理界面绝对能让你Hign飞起来。

好吧我承认我没自己买过,都是SiteSucker帮我买的。顺便推荐一下,免费的AdminLTE真的很不错,而且git上yii2的AdminLTE也有,很方便。

L的代码逻辑是比Y更稳重,从auth可以看出来,但基础路由像过家家,而且没有整合前端资源,再加上风骚的命名绝对会让人感觉跟用锤子手机一样有B格,顺便说一句,L的命令也是artisan,相比锤子只是少了smart。额,开玩笑。

我想说: L是好,Y也好;L好看,但Y好用。

看Y的guide能吸收先进思想,学会很多东西,真的。好吧,看L的DOC也能学到很多东西。在中国感觉L就像SONY,叫好不叫座。

我也用了一段时间了,发现y2的设计思想很迎合我的口味,比如oauth,快速restful,fields重命名,extraFields等等,看得出来作者确实很用心,在y1里面这些功能要么找extension,要么自己写。

还有点小事

PHP的命名空间用斜杠也就算了,那是没办法,但不能用*引用一批类让我有点不爽,还有就是对象操作符,没玩过C++伤不起啊,至今都不喜欢->,还是JAVA的.好。现在想想,其实当年PHP要是用+作为字符串连接符多好。

还能再啰嗦点么?

据说L的思维很跳跃、包装很彻底,彻底得让我即使用世界上最顶尖的PHP IDE -- PhpStorm也提示不粗来。所以我得做好心理准备了。

都j8别嘚瑟了【重点不在框架---在与个人怎么用了】【性能最高就写原生态代码了】好比武林中的打手-牛逼就牛逼-不牛逼你用什么武器都是一个【败将】

【支持tp】我用tp2.0做的3年前做的舞帝音乐传媒【无论是安全还是性能都是很高的】日访问200多万.........话不多说用实力说话~

新手上路,请多包涵

laravel好.

Yaf 框架吧,用C写的php扩展,不需要加载任何PHP文件即可使用的框架,性能上也甩很多框架几条街!!

yii2不错,不过我觉得你至少需要认真读一遍 Guide。

估计楼主是昨天看了我的回答然后来问这个问题的,既然当时我建议你用YII2,毫无疑问,现在我的回答也是一样,YII2

YII2搭建网站和实现功能有多快,你可以去YII2GIT克隆下来,按照基础模型安装方法或者高级模型安装方法安装一个试试,用不了你几分钟(第一次安装估计有点慢,因为那个composer)。

自己用过,觉得顺手才是最好的。

综合来看,推荐 Symfony2,虽然入手比较陡峭,但绝对满足你所说的“有前景”

1)发行的稳定版本 支持命名空间,自动加载
2)比较出名或者流行,有很大一个使用群体
3)至少有一个正式的官网
4)性能强大,扩展性强
5)符合编程规范
6)长远角度来看,团队不会突然解散(比较看重)
7)不是小打小闹,应用很广泛。
你这不是在推thinkphp的节奏么。。。

laravel 目前算是最火的了

TP入门,Laraval进深

新手上路,请多包涵

想追求开发效率,Laravel和Yii二选其一
想追求性能,用Phalcon
其他的基本不用考虑了,尤其是Thinkphp

我个人推荐Yii,相比thinkPHP,Yii很多方面做得强一点。

新手上路,请多包涵

yii还是不错的框架,从2011年开始用,到之后的版本更加完善,组件式开发,强大的widget, 并且有很多开发者来维护它,第三方组件也很完善,在stackoverflow 上的话题也很多,开发者很容易找到答案。

框架这种东西就是看哪个合适用哪个,别什么性价比,主流几个都要了解一下。高手会看场景决定使用哪种语言,普通人学几种框架要求不算过,千万别抱着哪个框架用。框架的作用1是快速开发应急,2是学习人家的思想。第二点尤为重要。

真要实打实的干起来,自己搭。这也是为什么前面说要了解多种框架甚至多种语言——这样才能取各家之长。

http://www.jitapu.me 这个吉他谱网站就是使用YII2开发的,你看看性能,快如闪电!打开本地文件一样!

亲,你用过ThinkPHP?我教你怎么获取配置

Config::get('配置参数');
推荐问题
宣传栏