mondaphp / framework
基于 WorkerMan 的轻量级、高性能 PHP 网络开发框架
Requires
- php: ^8.1
- ext-curl: *
- ext-openssl: *
- ext-redis: *
- doctrine/inflector: ^2.0
- illuminate/database: ^10.0
- illuminate/events: ^10.0
- illuminate/pagination: ^10.0
- illuminate/redis: ^10.0
- monolog/monolog: ^2.0
- nikic/fast-route: ^1.3
- symfony/console: ^6.0
- symfony/lock: ^6.0
- workerman/redis-queue: ^1.0
- workerman/workerman: ^4.0
Requires (Dev)
- laravel/pint: ^0.1.7
- phpstan/phpstan: ^1.7
Suggests
- ext-event: For better performance.
README
注意,此项目框架核心代码仅作为依赖,不能直接运行。
项目愿景
打造一个真正简单易用且超高性能共存的完美框架,真正为 PHP
敏捷开发而设计的框架,这是 mondaphp/framework
及其团队成员的初衷。我们将持续投入并为此付出努力,也欢迎你加入我们参与开源建设。
为什么要重新造轮子?
"PHP是世界上最好的编程语言",这句话虽然是一个梗,但确实代表了php这门语言在编程语言中的江湖地位。既然她是最好的语言,那么自然会涌现出各种各样的框架,包括php官方的ZendFrame
, Laravel
, Yii
,以及国产的thinkPHP
, ci
等框架。既然有这么多框架,为什么我们还要重新造轮子呢?原因有以下几点:
- 目前开源的php框架总有这样或那样的不符合公司项目要求的,使用起来不顺畅,要么就过于臃肿,像
Laravel
,ZendFrame
,ThinkPHP
那样过于庞大,学习成本高,要么就是扩展性或性能达不到要求,使用起来也不方便。 - 想要把自己学习到的php编程知识进行沉淀,最好的方法莫过于写php开发框架了。
- 目前的开源框架都是为了兼容高中低端各种用户而牺牲了框架本身的性能和特性,这显然无法完全满足公司的全部需求,而修改像thinkPHP这种大型框架是一件很痛苦的事情,成本几乎和开发自己的框架差不多。这也是很多大公司都有自己的框架的原因。
设计思想
mondaphp/framework
是一套 web
应用开发框架,我们认为好的开发框架应该是 方便、快捷、优雅、简洁 的,这也是我们一直在努力做的事情。我们希望框架既能封装良好,使开发者使用方便,又不损失框架性能,既能快速搭建系统又能保持良好的扩展性。
作为一群有追求的程序员,我们的目标是开发能够应对千万级 PV 的系统框架,并且能够支持多应用、长连接、任务调度、消息队列等功能。
我们严格遵循约定优于配置的设计原则,有约定就不提供配置,比如一些你几乎不会配置的可配置选项,我们都会屏蔽配置接口,按照约定的方式执行。配置过多只会让系统越来越臃肿,执行效率越来越低。
我们始终坚持 一个问题只保留一种你能够实现的最优解决方案即可,所以我们屏蔽了一些不规范的编码习惯,比如说路由定义几乎所有的框架都支持路由文件或者通过文件路径作为路由,但是在 Heros-Worker
中,抱歉,你只能使用我们提供的通过注解的方式编写路由,这样的设计是为了使代码可读性更高,结构清晰。二是框架采用了 illuminate/database
优秀的数据库 ORM,使得代码更健壮。当然这个见仁见智,认同点赞,不喜勿喷。
像其他框架一样,我们也会提供 annotation
, laravel ORM
, middleware
,validate
,session
, value
等开发过程中常用的工具的功能,跟其他框架不一样的是,我们还提供了类似 springboot
的 @Controller
, @Inject
, @Component
注解,开发者无需关心性能问题,在框架启动时,已经把 bean
加载到内存中,借鉴 java 中 springboot
框架的模式实现服务资源的托管。
特性
- 部署简单,开发效率高,性能优越
- 框架原理简单易懂,容易学习
- 在保持约定大于配置的原则下又保持着很好的扩展性
- 代码风格简洁漂亮,程序精简高效,注释详细,适合新手学习
GitHub 源码地址
GitHub: https://github.com/mrchenzifan/mondaphp
本地调试
如果你想在本地直接调试框架,不想每次都要更新到 composer
仓库,然后再用 composer update
去更新(这个过程非常慢,即使使用了中国镜像也慢),你可以通过任何方式将 Heros-Worker 放入你的本地目录,如 /code/php/heros-worker,然后在你的 app 项目的 composer.json 中加入如下配置
"repositories": [ { "type": "path", "url": "/code/php/framework" } ],
然后在 app 根目录下运行
composer require 'mondaphp/framework:*@dev'