什么样的学习路线或者知识储备能写出像 Laravel 或者 swoft 这样的框架?

大佬们好,其实我一直不太了解应该具备哪些能力或者如何去储备这样的能力才能写出类似swoft,laravel等这类框架呢?

  1. 自己写php4年了,基本就是在写业务。
  2. 数据结构,算法也是偶尔看看。
  3. 看这类框架底层的调用,确实很多看不懂,各种设计模式,写的也很规范
    麻烦各位大佬能不能提供下如何能达到这样的能力,应该学习那些知识,学习线路是怎么样的呢?
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

我先总结一下重点吧
一、框架有哪些功能,二、如何独立实现这些功能(有思路既可(不一定实现的效率非常高能实现即刻(看看框架的更新记录你就知道我为什么说不一定要求效率了)))

网上有挺多的 laravel 源码解析的,我觉得 laravel 相比 symfony 更让容易学习框架底层原理。( symfony 的缓存太多看着看着就跳走了)。
我个人有这么两个学习的思路可以看一下。
1、使用框架的时候思考自己是否能实现类似的单点功能,如解决控制器中的 ioc 容器。
2、直接通过代码的调试了解框架代码的运行原理。如利用 xdebug+phpstorm 进行单步调试。

在这里我有几点关于理解的建议
1、框架的部分代码不用过于执着为么要这么写,例如许多控制台程序( command 命令\或模板引擎替换的部分代码),这些东西的本质是为了更快开发而编写的代码,位开发者快速开发提供工具就是目的,所以不要执着这部分代码编写的目的
2、框架的某些部分是基于\借鉴前人思想、设计、总结产生的,这一部分可以配合查看一些设计原则,设计模式来学习,更容易理解。
3、某些编码的形式也可以多与人交流,比如为什么许多东西要赋值给属性,而不是证明一个全局变量,oo的写法比过程化的写法好在哪里等

基础部分的建议是
1、查阅 php 官方文档、将未初次或少见过的 php 核心函数要及时查阅文档。(反射类,数组接口,yield,闭包函数延迟加载的使用)。目前来看现阶段各种各种主流语言的核心使用方法相似,所以掌握好基础才能更进一步去增加组合的结果。如不知道反射类,(或者一些魔术方法的话),ioc容器的实现就会很困难
2、查阅 psr 社区规范。目前主流的 php web 框架/组件都在 psr 规范下实现,(但是也有部分不是按照此规范实现的、如一些网盘项目,单文件程序等)。规范主要目的是为了让大家更好的协作。
3、设计模式、设计原则的学习。这些东西虽然是经验之谈但是仍然很重要。其实回想一下当时刚入门的时候如果有一个很有深度的人对你传授一些php的知识,你是不是会觉得少走很多弯路,这些设计模式和设计原则就是这样的。
4、不要过分神圣的看带框架的本身的编码。框架本身也有一定缺陷。(比如我曾在不止一个很流行的php框架中发下 trait 我任务很失败的写法,在 trait 中调用未声明的变量,我个人认为这其实很不利于后期多人维护的。)。

这些是我的观点
(其实我看了几个原理的实现之后,以及一段时间的尝试之后,你可能觉得框架也就是那么一回事,生命周期中充满了钩子以提供开发者更多编码交互的可能。其次就是整合,整合你写的代码,整合许多使用工具。尤其是再各个框架跳过几遍之后)

其次框架中也有许多灵光一闪的写法。比如闭包实现的延迟加载,cache代码的生成,反射解析代码,这些东西了解到后,平时开发也能用这些写法提高效率。

:heart:


刚又看到 你写的一点,数据结构,其实数据结构再框架的实现中不是主要部分,框架的主要功能是逻辑的抽象,也就是代码的复用,协同开发的规范,功能优先,其次是效率,所以很多时候你了解到一个框架有哪些功能和如何实现这些功能是比较重要的。

4年前 评论
飘逸浪漫 (楼主) 4年前

我先总结一下重点吧
一、框架有哪些功能,二、如何独立实现这些功能(有思路既可(不一定实现的效率非常高能实现即刻(看看框架的更新记录你就知道我为什么说不一定要求效率了)))

网上有挺多的 laravel 源码解析的,我觉得 laravel 相比 symfony 更让容易学习框架底层原理。( symfony 的缓存太多看着看着就跳走了)。
我个人有这么两个学习的思路可以看一下。
1、使用框架的时候思考自己是否能实现类似的单点功能,如解决控制器中的 ioc 容器。
2、直接通过代码的调试了解框架代码的运行原理。如利用 xdebug+phpstorm 进行单步调试。

在这里我有几点关于理解的建议
1、框架的部分代码不用过于执着为么要这么写,例如许多控制台程序( command 命令\或模板引擎替换的部分代码),这些东西的本质是为了更快开发而编写的代码,位开发者快速开发提供工具就是目的,所以不要执着这部分代码编写的目的
2、框架的某些部分是基于\借鉴前人思想、设计、总结产生的,这一部分可以配合查看一些设计原则,设计模式来学习,更容易理解。
3、某些编码的形式也可以多与人交流,比如为什么许多东西要赋值给属性,而不是证明一个全局变量,oo的写法比过程化的写法好在哪里等

基础部分的建议是
1、查阅 php 官方文档、将未初次或少见过的 php 核心函数要及时查阅文档。(反射类,数组接口,yield,闭包函数延迟加载的使用)。目前来看现阶段各种各种主流语言的核心使用方法相似,所以掌握好基础才能更进一步去增加组合的结果。如不知道反射类,(或者一些魔术方法的话),ioc容器的实现就会很困难
2、查阅 psr 社区规范。目前主流的 php web 框架/组件都在 psr 规范下实现,(但是也有部分不是按照此规范实现的、如一些网盘项目,单文件程序等)。规范主要目的是为了让大家更好的协作。
3、设计模式、设计原则的学习。这些东西虽然是经验之谈但是仍然很重要。其实回想一下当时刚入门的时候如果有一个很有深度的人对你传授一些php的知识,你是不是会觉得少走很多弯路,这些设计模式和设计原则就是这样的。
4、不要过分神圣的看带框架的本身的编码。框架本身也有一定缺陷。(比如我曾在不止一个很流行的php框架中发下 trait 我任务很失败的写法,在 trait 中调用未声明的变量,我个人认为这其实很不利于后期多人维护的。)。

这些是我的观点
(其实我看了几个原理的实现之后,以及一段时间的尝试之后,你可能觉得框架也就是那么一回事,生命周期中充满了钩子以提供开发者更多编码交互的可能。其次就是整合,整合你写的代码,整合许多使用工具。尤其是再各个框架跳过几遍之后)

其次框架中也有许多灵光一闪的写法。比如闭包实现的延迟加载,cache代码的生成,反射解析代码,这些东西了解到后,平时开发也能用这些写法提高效率。

:heart:


刚又看到 你写的一点,数据结构,其实数据结构再框架的实现中不是主要部分,框架的主要功能是逻辑的抽象,也就是代码的复用,协同开发的规范,功能优先,其次是效率,所以很多时候你了解到一个框架有哪些功能和如何实现这些功能是比较重要的。

4年前 评论
飘逸浪漫 (楼主) 4年前

我之前和swoft作者在同一家公司上班,他是技术leader。他说到swoft里面的精华是AOP,希望大家把这个学透彻。

其实我明白你想要提升自己的心情,我告诉你个明确的道路,打开招聘网站,找一个你认为自己应聘不上但是薪水又吸引你的岗位,然后把岗位要求逐个击破,可能会花很久的时间,但是你照着做的话你就进步了。

最后我们要明白自己为什么要提升技术,再去提升技术,不要因为提升技术而去提升技术,这叫浪费生命。每个人的时间都很宝贵,共勉。

4年前 评论
L学习不停 (作者) 4年前
rufo 4年前
L学习不停 (作者) 4年前
飘逸浪漫 (楼主) 4年前
小手冰凉 4年前
L学习不停 (作者) 4年前
小手冰凉 4年前
L学习不停 (作者) 4年前
wifi 4年前
L学习不停 (作者) 4年前
wifi 4年前

框架这东西应该是由面到点的过程
比如你现在自己写一个PHP API框架 要具备那些功能

  • 自动加载 composer
  • 底层容器 IOC ,框架目录,容器比如参考 php-di/php-di ,前期自己也可以基于反射写一个简单的
  • 基础功能:路由,控制器,日志,数据库ORM,配置文件,计划任务等
  • 进阶功能:异常,缓存,消息队列,锁 等等
  • 封装:HTPP请求统一入口,再加入管道模式过滤。统一响应类Response。基础Model类可以扩展,自定义支持分库分表,缓存基类 等等
  • 单元测试
  • 原则:对扩展开放,对修改关闭
  • 前期可以基于compser站在巨人的肩膀上搭建,后面再自己去写底层的服务
4年前 评论

@滚球兽进化 还有几点,就是近段时间我关于厚积薄发的看法。最近一段时间由于裸辞在家备战考研,在空闲时间写了几个工具玩,爬虫,机器人应答。由于之前尝试和了解了许多库和不同方面的知识。虽然遇到的问题各种都有但是都很轻松解决了。比如数据解析不用正则用 xpath ,css 选择器,redis 做异步多任务爬取,异常重复入队,IP代理的使用(歪屁嫩的2次利用),cookie 的模拟使用,酷q的对接 http 上报处理, 接口请求, 任务处理, php -S 阻塞运行后切换 到了go开发 ( windows 开发 ,没搭建fcgi 不打算iis ,http 上报阻塞就直接用go重写了一遍 )。 写的都比较顺畅,所以也算是过去看的东西的总结吧,算是一个厚积薄发的体验。 只是一段感慨,,感觉挺棒的

4年前 评论
飘逸浪漫 (楼主) 4年前
Remember 4年前
幽弥狂 4年前
wifi 4年前
FMW 4年前
wifi 4年前
FMW 4年前

用轮子装 或者 把 轮子 修改下。

自己实现? 能比那些大神的 轮子更牛逼?

比如: 容器 轮子di , 路由 轮子: fastroute

我觉得学习什么框架底层,不过就是学习 轮子底层。
来自一个两年菜鸟的意见

4年前 评论
飘逸浪漫 (楼主) 4年前

人家这框架也不是一开始就这么叼的,这么庞大的,,,很多年,很多人持续迭代出来的,,,你可以先做一个简陋的框架,然后用这个框架做项目,,,然后就会发现各种问题,然后改进加功能,,,坚持个一年,,,

我只是想当然的

4年前 评论
Dennis_Ritchie

更重要的是别人的代码架构,设计思想

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!