php框架设计

用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开发者较少依赖于庞大的框架了,更多的是使用专门的小型组件。(见 <>一书,这里有介绍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框架里是最小的.从小开始,你可以把你的程序通过添加组件而实现不断规模成长

概述

受到Ruby on Rails的刺激,PHP社区目前流行框架的开发,几乎是一日一框架。

如果你选择MySQL作为开发数据库,从零开始设计一个网站,你可能需要从PHP5,CakePHP,或RubyOnRails中选择一个作为开发工具——如何选择?为什么作出这一选择?这是需要思考的。作出决定前你需要考虑以下五个方面:

1.成熟的解决方案;

2.功能性;

3.熟练使用者的数量(以组建一个团队);

4.复杂性/易用性(新手和高手各取所需);

5.你所选择的最优之处,以及其它两种的最不利之处。

维基百科上的这篇对比可供参考。[http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks a comparison of web application frameworks.]

二,QeePHP和FleaPHP

QeePHP和FleaPHP 应用程序开发框架

三,ThinkPHP

其它

A, Fusebox ; Fusebox is a methodology, and framework that helps you work smarter & faster to build any conceivable web application.

B, Prado ; Prado is a component-based and event-driven framework for rapid Web programming in PHP 5.

C, Cake ; Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC.

D, Mach-II ; Mach-II is a web-application framework focused on easing software development and maintenance.

E, PHOCOA ; PHOCOA (pronounced faux-ko) is a web application framework for PHP. It is an object-oriented, event-driven, componentized, MVC (model-view-controller) framework inspired by Apple's Cocoa and WebObjects technologies.

Akelos Framework — an open source web application framework written in PHP

CakePHP — an open source web application framework written in PHP

Canvas — an open source web application development framework written in PHP

Fusebox — a web application framework for ColdFusion and PHP

Mach-II — an MVC web application framework for ColdFusion and PHP

PHROOT — PHP Rapid Object Oriented Technology Framework Project (PHP)

PRADO — component-based, object-oriented PHP web application framework

Radicore — an open source web application framework that uses transaction patterns, written in PHP

RNA — an open source component-based, object-oriented PHP web application framework

Seagull — an open source framework written in PHP

Symfony — an open source web application framework written in PHP

WASP — an open source web application framework written in PHP

Molins — PHP Struts-like framework for enterprise web applications

web.framework — PHP MVC based framework for web applications

Xaraya — Xaraya is a web application framework and content management system, written in PHP and released as free software under the GNU General Public License.

Zheta — PHP objects framework for enterprise web applications

Zend Framework — a high quality and open source framework for developing web applications and web services.

ZNF — PHP Struts-like framework for enterprise web applications

Zoop Framework — open source component-based, object-oriented PHP web application framework

参见:

  1. 关于如何正确使用PHP框架及如何选择框架之我见

  2. PHP高性能框架选择

  3. PHP_Application (PApple)|:《开源合辑-(软件开发->框架)之(PHP)

  4. CodeIgniter|
  5. 关于三种主流WEB架构的思考
  6. Web开发新型架构LAPC/F
  7. CakePHP中文手册【翻译】
  8. FleaPHP项目实战(八) 完
  9. FleaPHP 应用程序开发框架
  10. FCSPHP开发框架
  11. ThinkPHP 是一个开源的快速、兼容而且简单的面向对象的轻量级PHP开发框架
  12. 合理设计PHP项目 MVC模式、类封装还是黑客代码
  13. CodeIgniter is a powerful PHP framework with a very small footprint