用设计模式来讲:其实不管设计模式照样实际编程的经验中,我们都是强调“高内聚,松耦合”,我们做到高内聚的结不雅就是每个实体的感化都是极端专一,所以就产生了各个感化不合的实体类。在组织一个逻辑功能时,这些细化的实体之间就会不合程度的产生依附关系,对于这些依附我们平日的做法如下:
- class Demo
- {
- public function __construct()
- {
- // 类demo直接依附RelyClassName
- $instance = new RelyClassName();
- }
- }
[ file: tests/* ]
如许的写法没有什么逻辑汕9依υ?题,然则不相符设计模式的“起码知道原则”,因为之间产生了直接依附,全部代码构造不敷灵活是紧耦合的。所以我们就供给了一个第三方的实体,把直接依附改变为依附于第三方,我们获取依附的实例直接经由过程第三方去完成以达到松耦合的目标,这里这个第三方充当的角色就类似体系架构中的“中心件”,都是调和依附关系和去耦合的角色。最后,这里的第三方就是所谓的办事容器。
在实现了一个办事容器之后,我把Request,Config等实例都以单例的方法注入到了办事容器中,当我们须要应用的时刻安闲器中获取即可,十分便利。应用如下:
build步调
- // 注入单例
- App::$container->setSingle('别号,便利获取', '对象/闭包/类名');
- // 例,注入Request实例
- App::$container->setSingle('request', function () {
- // 匿名函数懒加载
- return new Request();
- });
- // 获取Request对象
- App::$container->getSingle('request');
或者你觉着在这个框架实现的细节你想懂得的,一样可以给我提 issue ,后面我会总结成响应的文┞仿分享给大年夜家。
[ file: framework/Container ]
Nosql模块
- // 获取redis对象
- App::$container->getSingle('redis');
- // 获取memcahed对象
- App::$container->getSingle('memcahed');
- // 获取mongodb对象
- App::$container->getSingle('mongodb');
[ file: framework/nosql/* ]
接口文档生成和接口模仿模块
平日我们写完一个接口后,接口文档是一个问题,我们这里应用Api Blueprint协定完查对接口文档的书写和mock(可用),同时我们合营应用Swagger经由过程接口文档实现对接口的及时拜访(今朝未实现)。
Api Blueprint接口描述协定拔取的对象是snowboard,具体应用解释如下:
接口文档生成解释
- cd docs/apib
- ./snowboard html -i demo.apib -o demo.html -s
- open the website, http://localhost:8088/
接口mock应用解释
- cd docs/apib
- ./snowboard mock -i demo.apib
- open the website, http://localhost:8087/demo/index/hello
[ file: docs/* ]
单位测试模块
基于phpunit的单位测试,写单位测试是个好的习惯。
若何应用?
build脚本
tests目次下编写测试文件,具体参考tests/demo目次下的DemoTest文件,然后运行:
- vendor/bin/phpunit
推荐阅读
科技公司裁撤中年技巧员工的传闻,每隔一段时光就会在网上漫溢、发酵。法度榜样员们有点懵。十年前,当他们踏着高考重点登科线,走进大年夜学计算机院系的时刻,想象的而立生活必定不是如>>>详细阅读
本文标题:从0开始构建一个属于你自己的PHP框架
地址:http://www.17bianji.com/lsqh/35069.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示