一般我们会选择一个框架来完成我们要做的开发任务,而不是从0开始,避免重复造轮子。框架抽象了许多常用的底层逻辑,封装了许多通用又简便的方法,让我们快速高效的完成任务。
框架都有什么类型
其实我们并不是必须要使用框架,有时候使用原生PHP会更好,但如果你需要一个框架,那么从设计规模上有这样几个类型:
- 微型框架
- 全栈框架
- 组件框架
- 工具框架
从运行方式上,又可以分为这样几个框架:
- 面向Web的PHP-FPM框架
- 面向Web的PHP-CLI框架
- 面向其他场景的PHP-CLI框架
你可能会纳闷,怎么没有“面向其他场景的PHP-FPM框架呢?”,哈哈,PHP-FPM就是专门用来处理Web的一个PHP解决方案,他本来就是面向Web的,也只能面向Web。这也就是有一部分人宣扬的“PHP只能做Web”的论调,其实是“PHP-FPM只能做Web”,PHP本身还是非常灵活和强大的。
什么是微型框架呢?一般微型框架只会处理系统的入口部分。比如如今我们在Web开发中经常接触到的一个概念“路由”,这样的微型框架会把HTTP请求转发到一个闭包、控制器或方法中,尽可能的加快开发速度,如果有一天我们的URL要发生变化了,只要调整路由即可,不需要调整主要业务的代码位置。再比如一个面向命令行的框架,处理好了常见的命令操作和参数,让我们只要把核心逻辑写好就可以了。
什么是全栈框架呢?这是相对于微型框架而言的,许多框架会在微星框架的基础上加入许多功能,以试图解决各个方面的问题,比如状态存储、数据库、缓存、验证等等,这时我们就称它为全栈框架。一个标志性的特点是,这些框架通常会内置一个ORM。当然也不是所有的全栈框架都会内置ORM,可能会引用第三方的库。但是他们都有一个共同的目标,就是让自身的规范标准尽可能满足所有场景。
什么是组件框架呢?组件框架是有多个独立的库结合起来的,但这类框架仍然会提供一个代码的组织规范(代码目录的存放标准等)。一般的这些框架的组件,还可以和其他框架一起使用。
什么是工具框架呢? 这是小编自己总结的一个概念,这类框架是为了解决某一个场景的、完整度很高、但并不能直接使用的框架,只是完成了这一场景中需要的更多的工具。比如一个通用后台管理框架、内容管理框架、爬虫框架等,小编也会在后面介绍一些这样的项目。这类框架通常只能用来开发某一个专门的场景。
至于运行方式的这几个分类,其实很好理解,一般现代的用来在PHP-FPM中运行的框架,也有办法从PHP-CLI中运行,比如ThinkPHP提供了基于Swoole和Workerman的运行方式。也有一些专门在PHP-CLI中运行的面向Web的框架,这些框架既有微型的,也有全栈的,后面我们会介绍的。
除了Web还能有什么场景呢?其实PHP-CLI能够处理的场景很多,比如长链接(物联网、聊天),多进程(爬虫、采集、处理任务)、系统操作(数据迁移、系统监控)等等,后面会介绍到一两个PHP-CLI的框架。
有哪些框架
ThinkPHP,这是国内的很流行的一个开发框架,在国内的生态非常强大,许多后台管理框架都是给予它做的。
ThinkPHP算是一个全栈框架,但这并不代表它非常笨重,ThinkPHP是简洁实用的、注重性能的轻量级框架。小编一直很钟爱ThinkPHP,但是他也面临所有国产开源项目的问题,贡献者太少,“伸手党”太多。或许等国内的商业和技术环境更好的时候,或者准备面向英文生态的时候,ThinkPHP的开源运作会提升一个层次。
ThinkPHP,既可以在PHP-FPM中运行,也内置了基于PHP-CLI的运行方式,通过使用Swoole或Workerman的方式。
Laravel,这是目前最热门最流行的框架,似乎除了不好拼写以外,没什么大的问题。
从开源运作上讲,处于非常高的层次(相对国内的开源项目来说),稳定的更新周期和技术支持,强大的社区生态,先进的编程思想,都是选择它的理由。Laravel是一个全栈框架,但同时也是一个重量级的框架,很多人诟病它的性能,但其实小编认为这并不是什么大的问题,PHP的运行有PHP的优化方案,重量级框架的问题在于大量的文件加载,通过PHP缓存或者其他的运行方式(从PHP-CLI加载运行),性能问题并不是接受不了的。
Laravel,既可以在PHP-FPM中运行,也有在PHP-CLI的解决方案,实际上运行Laravel的方式太多了,很多PHP-CLI的框架都会提供运行Laravel的方案和例子。
Yii,这是国内生态中经典的强大的框架。
Yii是一个全栈框架,实际上他算是“真·全栈框架”,他在处理Web和CLI中都有丰富的工具。
上面介绍的是几个国内比较热门的全栈框架,实际上全栈框架还有很多,这里不再一一列举,以后有的是机会。
Lumen,是基于Laravel的一个性能极快的微型框架。
相对Laravel而言,他更精简,但同时可以通过扩展的方式,获得Laravel的所有功能。
它是一个运行在PHP-FPM环境中的微型框架,但作为一个现代框架,也有很多PHP-CLI的运行方式。
webman,一个基于Workerman的微型框架。
webman仅提供了最核心的功能,比如路由、Session、中间件等,如果你需要更多的工具,通过组件加载即可。他是基于Workerman开发的,这意味着他只能运行在PHP-CLI环境中。但这并不是什么缺点,实际上,它Workerman的所有功能,比如自定义进程、进程守护、长链接服务器等。后面会介绍到Workerman。如果你希望找一个精悍简单地框架,webman非常合适。
EasySwoole,一个基于Swoole的全栈框架。
EasySwoole是基于Swoole开发的一个面向Web的框架,但是就像上面提到的webman一样,它基于swoole,意味着所有那些swoole的特性它都有。并且提供了大量的工具组件,这些工具组件中有很多提供了协程支持。它不仅提供了大量的工具,还提供了丰富的文档,或许你会爱上他。
imi,一个全栈框架,同时兼容多个运行环境(PHP-FPM、Swoole、Workerman、RoadRunner)。
imi是一个基于Swoole的框架,但新的版本并不完全依赖Swoole,就像上面讲的一样,同时兼容多个运行环境。作为一个全栈框架,他也提供了大量的工具组件,其中包括许多协程的工具。同时具备了Swoole的那些能力。目前框架也是十分活跃。
上面介绍了几个PHP-CLI的框架,这样的框架还有很多,以后有机会还会介绍。在介绍这几个项目时,你会时不时的看到Workerman、Swoole等字眼,是的下面就简单(真的很简单)介绍一下这两个框架。
Workerman,一个开源的高性能PHP容器。
它是一个PHP-CLI的框架,是一个PHP的容器,简单地说,他可以替代PHP-FPM运行PHP代码。Workerman在最近的性能测评中非常优秀,文档和生态也非常好。不论是不是有兴趣,都应该学习接触一下。这里不做太多介绍了,它的文档非常的友好,自己去体验快了吧。
Swoole,一个PHP协程框架。
它是一个PHP-CLI的框架,是一个PHP的容器,简单地说,他可以替代PHP-FPM运行PHP代码。Swoole使用C扩展开发的,并且在国内也有很大的影响力。Swoole本身相对来说“比较底层”,衍生了一大批的框架。这里也不做太多介绍了,自己去探索吧。
ReactPHP,一个PHP事件驱动的底层库。
它是一个PHP-CLI的框架,是一个PHP的容器,简单地说,他可以替代PHP-FPM运行PHP代码。这个库在国外是非常流行的,之前小编介绍过一个纯PHP开发的Redis服务器,就是用它开发的。他在国内不太普及,但是也是一个很强大的项目,比如国外有一个PHP-PM,就是用它开发的,用来运行laravel等框架,来提高运行速度。
Minicli,一个微型的PHP-CLI框架。
Minicli是一个PHP的命令行的极简的框架,提供了一个简单地命令行操作,并且提供了规范的代码加载,没有更多内置功能。
CLIFramework,一个PHP-CLI的全栈框架。
与上面介绍的Minicli不同,它提供的是一套大而全的命令行应用框架:
- 能够实现各种类型的参数格式(长选项、短选项、必填、可选、默认值)
- 分层命令
- 命令参数自动提示
等等。如果你需要一个健全的命令行框架,那么可以选择它。
关于工具类框架
其实小编说的工具类框架,就是解决特定场景的项目,比如后台管理框架、内容管理框架,这里就不列举了,遍地都是,回头或许会做个专题来介绍整理一下。
但是这里要介绍一个有趣的工具类框架,爬虫框架。
Beanbun,是一个简单地可扩展的爬虫框架,支持分布式、守护进程,使用Guzzle来做HTTP客户端。
他是基于Workerman的,专门用来做爬虫的项目。它有以下特点:
- 支持守护进程与普通两种模式(守护进程模式只支持 Linux 服务器)
- 默认使用 Guzzle 进行爬取
- 支持分布式
- 支持内存、Redis 等多种队列方式
- 支持自定义URI过滤
- 支持广度优先和深度优先两种爬取方式
- 遵循 PSR-4 标准
- 爬取网页分为多步,每步均支持自定义动作(如添加代理、修改 user-agent 等)
- 灵活的扩展机制,可方便的为框架制作插件:自定义队列、自定义爬取方式...
Beanbun相对来说比较精简,但是也提供了很多组件解决方案,这些你都可以在它的文档中找到。
最后
以上就是本文对框架的简单介绍,除了本文提到的这些外,还有许许多多的优秀的框架,这里没提到并不是说他们不好,而是小编还没有这样的能力去了解清楚。以后有机会再介绍。
原文标题:PHP有哪些框架?
原文地址:https://phpreturn.com/index/a6251835364163.html
原文平台:PHP武器库
版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。