用PHP 开发程序这么多年了,今天想和大家谈谈如何正确使用PHP框架.

即关于PHP开发什么时候用框架,用不用框架,用什么框架,不同项目是否用不同框架,是否要学习多个框架,付出多少学习成本等问题.

先说一下,我用过的框架有:Swoole, Laravel, phalcon ,symfony, codeigniter, thinkphp.

这几个框架都有什么特点? 有没有做什么项目都通吃的框架?

先说一下swoole,swoole是用C写的PHP扩展,性能很高,通常用于写后台服务和网络通信程序.,但是对于一般的普通web程序它不太适合.并且学习难度大.当然如果你追求性能,写后台服务和接口还是适合的.

再说一下 Phalcon这个框架,同样的C写的全栈框架,以php扩展方式发布,性能可以说是最好的.但是因为一是英文的文档,要求你英文比较好.phalcon在国内用的人比较少,所以中文文档不多.phalcon写web程序和接口都是很好的.但不适合写后台服务.还有一点是这个框架虽然好,但是因为是C写的,如果有一些bug,就要等官方修复,或需要你懂C语言自己来修复.还有一点扩展性不好,如果你想加新功能,比如mongodb数据库支持,它是支持的,但是需要是老的php mongo扩展,用新的php mongodb扩展的话,就需要写php代码来实现,这就降低了性能.所以说这框架很好,但还是有一些不便.

其次是Laravel这个框架,最近可是风头正旺,号称最好的框架,以优雅著称.也像phalcon一样,用到了最新的一些概念:如composer,依赖注入,服务定位等.国内用的人也不少,中文文档及资料也比较多.但是我想说的是性能是这个框架的硬伤,新安装的laravel 5.1 框架 输出一个hello world 每秒rps 才达到几十, 而最 新发布的laravel 5.5 及性能居然还不及laravel 5.1版.究其原因是因为这个框架一启动就加载了一百多个文件,这就是性能很低的原因(IO开销很贵的!). 这个框架再好,但是性能太低,就需要拿硬件来支撑.除非你是土壕,否则还是不建议用Laravel 这个框架.

再说一下 thinkphp 这个框架.这个框架可以说是国内用得最多也是争议比较大的一个框架了.因为是国产框架,所以中文资料是最丰富的.像国内一些电商,cms,微信,社交程序等很多都是基于这个框架开发的,开源程序比较多.是一个非常接地气的框架.但是这个框架口碑有些不好是因为早期的thinkphp ,如3.1 ,3.2版性能比较低.二是有人出于对国产品牌的不信任,而不使用thinkphp框架.但是这种情况已在最新的thinkphp 5.0有很大改变,tp 5.0也像laravel一样,采用最新的思想,支持composer安装等.最重要的是性能有非常大的提升.在我压测下,目前是仅次于phalcon框架,性能第二的框架.启动加载的文件很少,所以很快.所以说如果你考虑性能与接地气,可以用这个框架.

最后重点来了:说说目前我认为的最好的框架:symfony. symfony是什么:symfony是一系列的组件,也是一个框架. 现在许多框架都用到了symfony的组件,laravel就是基于symfony开发的.

我在前面说了,什么时候用框架,用不用框架,用什么框架.性能与开发规范,开发方便是都需要考虑的.根据最新的php开发方法,PHP开发者较少依赖于庞大的框架了,更多的是使用专门的小型组件。(见 《modern php》一书,这里有介绍http://blog.p2hp.com/archives/3634).试想如果你的程序如果全部功能只是输出一句"hello world"你还用框架吗?当然这只是极端的情况,我们几乎不能遇到.所以一个好的方法就是用组件.利用composer自动加载把它们组合起来,用到什么功能就用安装什么组件.这是最环保与方便的方法.这种方法是不浪费,不像传统框架一样,我只做一个基于mongodb数据库的json api,,它把所有的不相关的东西:如mysql,redis.模板引擎,表单,session等 一堆 我不需要的都加载了进来,那性能可想而知,还会造成程序包可能达几百M之大.这都是一种浪费.现在推广极简生活,这是一种思维,我认为我们应该把这种好的思想带入的程序开发中来.

这种极简的实现方法主要有两种:纵向的和横向的.纵向的就像洋葱,一层一层深入,如果我输出一个hello world.可能只用到了最外层的功能.往里的程序组件都不加载,即基于纵向组件的实现方式.这种实现比较难.所以不考虑.另一种就是横向组件.组件之间都是并列的.用到什么,就横向加入什么组件.目前基本基于组件的框架都是这么用的.

当然我并不是说一定要用组件,而不是框架,有时用框架还是会加快开发速度的.这个看个人选择. 我目前是采用组件加框架的方式开发,所以我选择了symfony这个框架,即是一组组件,又是一个框架.在框架的基于上可以根据需要加载不同的组件.

symfony框架目前在国内用的也不太多,因为一是中文资料不是很多,二是以前的版本如2.6 ,3.4 学习起来比较陡峭.就是让一些人望而却步.而且旧版本的性能也不是很高.但这一切随着symfony 4.0的发布,彻底改变了. https://symfony.com/4 .symfony 4,拥有开箱即用的性能.压力测试,输出hello world 达到 1000多rps,可以说性能非常高.这在纯PHP写的框架里数一数二. symfony 4.0 相较于之前的版本变得易于学习, 易于配置, 易于安装和部署, 更易于掌握。简单, 强大!基于symfony的几十个组件,可以实现任何你想要的功能,而又保持高性能.即可以开发简单的高性能API接口,微服务,又可以开发复杂的web系统,也可以开发后台任务程序.默认情况下,安装smyfony 4.0只安装最少的内核功能.以优化和消除任何非必要的依赖性,目前在PHP框架里是最小的.从小开始,你可以把你的程序通过添加组件而实现不断规模成长!!

 

写在最后:

建议大家读 一读这篇博文:http://blog.p2hp.com/archives/3634更好的是买 《modern php中文版》来学习一下.

 

此文为原创文章,转载请注明: 来自 Lenix的博客,地址 http://blog.p2hp.com/archives/5170

.

 

 

 

最后更新于 2018年4月15日

[原创首发]关于如何正确使用PHP框架及如何选择框架之我见.
标签: