PHP8 之 mini-laravel
介绍
mini-laravel 是基于 PHP8 编写的一个用于学习 Laravel 的项目(仅用于学习用途)
主要实现了 服务容器、中间件、路由、一些核心启动类如:加载配置文件……;比较有特色的一点是利用 PHP8 新增的注解特性实现了路由的定义
像一些服务提供者如:AuthServiceProvider、DatabaseServiceProvider…… 都没有写,没有写的原因就是每个分析下来的时间太长了,而且个人认为将 Laravel 的核心机制弄明白之后再去看这些会容易很多(妈妈再也不用担心我不知道这个骚方法是怎么来的啦)
由来
我入门 Laravel 也是看的社区的教程(在这里感谢一下社区的教程 收获很多),但是在教程中总是看见使用一些找不到源头的骚操作,还有控制器里方法的参数注入(我明明没有 new 为什么可以用??)相信很多同学入门的时候有这个疑惑
入门之后在项目中开始使用 Laravel ,虽然写业务没有什么问题但有些时候架不得好奇会想去窥探源码发现根本不知道如何下手。。。
在这个时候发现社区有刨析源码的文档 《深入 Laravel 核心》,看了这个文档之后对 Laravel 的核心机制有了粗略的了解之后看源码的时候还是感觉有点困难;
继续找社区的文档发现了《Laravel 之道》,这位老哥是真滴牛批硬是给 Laravel 的每一行代码都给你讲了(100分)。贴一个截图
这是看了老哥的 Composer 加载原理之后,我非常激动的给老哥发了个私信哈哈哈虽然看了上面两个文档之后对 Laravel 的原理算是了解了但是总是会忘记一些枝头末尾的关联片段,再加上当时 PHP8 刚刚发布,我就想为什么不写下来呢顺便熟悉一下 PHP8 新特性
过程
在写路由部分时我被 Laravel 的路由源码给绕晕了,然后看了 老司机带你实现 Laravel 路由注册功能 这篇文章之后,对路由的实现有了比较清晰的认识 感谢老司机哈哈哈 @Dennis_Ritchie,再回来看源码的时候就轻松很多了
因为用的 PHP8 难免要 Google,意外发现了这个 laravel-route-attributes 仓库,就有了上面的注解路由实现当然大部分参考自这个仓库
好像整个写下来最难的部分应该就是路由了~
可能的帮助
如果你在看 Laravel 的源码有不明白的地方,可以看看 mini-laravel 的对照实现会简单很多,Laravel 的源码总是穿梭于各个包之间
然后我总结了我在 mini-laravel 中使用到的 PHP8 的新特性与一些不太常用到的类
- Constructor property promotion #新增特性 构造属性提升
- str_starts_with() #新增函数
- str_contains() #新增函数
- $object::class #新增语法
- throw expression #新增语法
- Attributes(注解) #新增特性
- The ReflectionType Class #代替 \ReflectionParameter->getClass() (非PHP8新增类)
总结
在这个过程中我觉得耐心很重要~ 想一个场景:你点开一个方法结果里面是这样的
是不是很绝望!!!但是这是极少数案例~
最后祝各位 新年快乐、永不加班~
本作品采用《CC 协议》,转载必须注明作者和本文链接
不错,Laravel的下个大版本很可能会按照这个路子走。
LZ 可以去当 laravel 文档的译者了,属实吾辈楷模 :thumbsup:
可以有(优秀)
对 laravel 有改善建议的话,可以尝试给 laravel 项目提交 PR ,这样你的代码有可能服务更多的人,方便大家