首页 存档 技术 查看内容

PHP开发演化史 01存单页应用 02函数"中央集权"开始有分工 03各种MVC框架 04Compos ...

2018-3-30 13:00 |来自: 互联网 271 0

摘要: 来源 /腾讯课堂Coding学院(ID:ke_coding) 导语也写了几年PHP了, 一直都在追求高效的开发, 随着行业技术的发展, PHP也一直都在进化, 开发的方式也不断的在更新 今天就从我的经历来简单跟大家分享一下, 新人可以看 ...

来源 /腾讯课堂Coding学院(ID:ke_coding)

导语

也写了几年PHP了, 一直都在追求高效的开发, 随着行业技术的发展, PHP也一直都在进化, 开发的方式也不断的在更新 今天就从我的经历来简单跟大家分享一下, 新人可以看看一个老鸟的一些思考, 老鸟的希望抛砖引玉的交流。

01存单页应用

最早接触PHP的时候是在13年, 那个时候的PHP还是作为快速功能开发而存在的, 最主要的作用可能就是 1. 处理提交的表单 2. 根据参数从数据库拉取相应的数据展示 那个时候的代码基本上都是随性而为, 而且基本上PHP代码都是作为补丁一样存在于一个HTML页面中的, 所以也是某种形式上的”单页应用”这个时候的PHP开发基本上可以说就是:

02函数"中央集权"开始有分工

但是随着公司业务步入正规, 在某一块业务上可能有了进一步发展的需求, 所需要的程序猿也从原来的一只变为了一群, 那么总不可能一群程序猿都按照自己”天马行空”的套路来开发吧? 那万一某个人离职了或者要维护另外一个人的代码还不欲哭无泪? 所以大家自发的(其实更多都是被业务、被青涩的新人、被坑逼的老人逼出来的)开始维护一个公共的代码层面上的规范, 某种意义上也算一个框架的雏形吧!

所以这个跟团队的风格以及水平都是有关系的, 这里就拿我当时接触到的一个套路简单的举例, 直接上代码的结构图:其中的核心就是global.php 这个文件的代码大概是如下结构(年代久远 可能记不太清楚了 = =)很明显这个global.php就相当于一个公共的初始化的文件, 那么在我们需要开发一个页面hello.php的时候结构大概就如下:所以这样做的趋势很明显: 初始化的工作开始收敛, 我们的项目收敛在global.php里面 开始出现一些分工的收敛, functions.php专门存放公共的函数, Mysql.class.php数据库操作有关等

好处也很明显:

出错的机会变少了(谁没几个写中文分号\空格 语法错一点点死活看不出来的时候?!)

由规范反哺你需求处理的思路, (公共逻辑找functions, 数据库操作封装在Mysql.class)

03各种MVC框架

开发的形式会随着业务、行业的进化而进化 聪明的程序员开始制定自己觉得好用的规则, 并通过当时比较火的MVC架构得到完善, 发布了各种各样的框架 我差不多也写了1年的PHP, 接触了ThinkPHP\CodeIgniter\ZendFramework等框架 各种框架对于我来说其实就是上面的思想的高级版, 同时把对于Http请求的处理加入到公共的逻辑里面, 而且出现了我认为比较重要, 放到现在也算是比较重要的东西各种风格的load机制 在CI框架里面的话 用过的肯定不陌生 就是load方法实现的原理就在CI_Loader.php里面:回过头来看CI框架依然简单好用, 加载可控, 核心逻辑清晰简单, 但是2.x的版本:

核心类的命名风格太奇怪 CI_Model (蛇形加驼峰 厉害了我的哥= =)

没有命名空间的概念 全局会有污染\冲突

在后面公司的电商业务开发中由于团队水平、上手难易等原因我最终选择了CI框架

刚开始的时候很美好, 但是到了后期渐渐的出现了问题 大家都知道电商业务:

操作的对象繁多(用户 用户地址 商品 SKU 商品分类 属性 供货商 订单等)

每个对象的属性\状态又繁多(商品名字 市场价 售价 详情图 头图… 订单 代付款 待发货 待收货 已取消 已确认 申请退款 申请退货 退款中…)

所以用CI框架渐渐力不从心:

底层逻辑(页面展示数据 数据库操作)跟业务逻辑(只显示某人的某种订单 读取这个人的所有订单加上订单的收货地址)傻傻分不开

频繁的”雪崩”我就改了发货的model逻辑 怎么前台用户都不能生成订单了?

最终我的老大采用模块化、微服务化的结构解耦了, 这样设计也不用考虑太多复杂的规则, 就算招实习生来维护也方便

但是除了接受老大的方案之外, 我也开始了解研究老一辈比较不喜欢的技术命名空间以及Composer(后面发现其实也是PHP现在发展的趋势)

04Composer/Packagist......

为了应对互联网快速变化的场景, 大家都从不同的角度做了很多努力, 在开发这一块我的追求就是:

[模块化]如何构建工具、底层模块、业务逻辑模块, 如何去把这部分复杂度集中起来管理

[通用加载]如何去统一的管理这些服务 使得在任何场景都能快速的派上用场 不需要开发关注过多的细节

解决了这两个问题之后其实后面的开发就能够像搭建积木一样简单了~

通用的autoloadComposer

现在写PHP的应该没有人不知道Composer了吧? 在当时挺多人还是排斥的, 我老大排斥的主要原因比较坑他不太喜欢命名空间的斜杠的写法, 觉得太另类……

但是Composer依据PHP的spl_autoload_register的方法提供了一种项目层面的包管理手段(pear其实更多的是系统层面的)

原理遵循的是PHP-FIG提出的PSR系列规范

现在的框架比如Laravel, Symfony等基本上都使用了Composer作为自己的包管理工具

组件库Packagist

自己业务相关的逻辑可以动手封装, 之后就跟加载其他库一样加载

只要你能想到的一些公共的业务逻辑, 你都可以组装放在这边, 通过规划好的接口(有点类似前后端开发先协定好接口协议一样)跟其他模块打交道, 当然如果接口规划不好, 后期这里的维护也是特别蛋疼的= =

05Laraver框架简单介绍

在我看来Laravel框架其实可以从动静两方面来介绍

静的方面他引入了依赖注入的概念,

动的方面的话涉及到一个比较简单 但是概念特别好的库PipeLine通过这个库Laravel整合了一个扩展性很高的请求处理流程

在框架里面各种依赖都通过Container来进行管理,

而整体处理请求的流程的设计则通过Pipeline的库来实现一个层层包裹的效果, 使得各个处理之间互不影响

关于Laravel的源码分析文章后面也会陆续更新

06总结


其实有时也在想, 或许再过好几年, 我们现在写的代码就会被人当作”古老”的代码了吧~

但是不管怎么样, 顺应发展的趋势, 去解决需要解决的问题, 才是我们需要关注的吧~


业界最顶尖的技术大咖/最权威的实战分享/最前沿的行业资讯/尽在腾讯课堂Coding学院

长按二维码关注Coding学院


声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部