[精选]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 协议》,转载必须注明作者和本文链接
最美的不是下雨天,而是和你一起躲过的屋檐!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 18

笑死,并发和框架有关系

1年前 评论

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

1年前 评论

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

1年前 评论
giao哥

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

1年前 评论

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

1年前 评论

性能不够直接上swoole啊workman

1年前 评论
playmaker

水文

1年前 评论

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

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年前

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

1年前 评论

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

1年前 评论

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

1年前 评论

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

1年前 评论

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

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

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