参考文章:[https://laravelacademy.org/post/769.html](https://laravelacademy.org/post/769.html)
## DI(依赖注入,是一种设计模式)
只要不是由内部生产(比如初始化、构造函数 \_\_construct 中通过工厂方法、自行手动 new 的),而是由外部以参数或其他形式注入的,都属于依赖注入(DI) 。是不是豁然开朗?事实上,就是这么简单。下面就是一个典型的依赖注入:
~~~
// 超能力模组
$superModule = new XPower;
// 初始化一个超人,并注入一个超能力模组依赖
$superMan = new Superman($superModule);
~~~
我们定下了一个接口 (超能力模组的规范、契约),所有被创造的模组必须遵守该规范,才能被生产。
~~~
interface SuperModuleInterface
{
/**
* 超能力激活方法
*
* 任何一个超能力都得有该方法,并拥有一个参数
*@param array $target 针对目标,可以是一个或多个,自己或他人
*/
public function activate(array $target);
}
~~~
遵循接口,创建了下述(模组)类:
~~~
/**
* X-超能量
*/
class XPower implements SuperModuleInterface
{
public function activate(array $target)
{
// 这只是个例子。。具体自行脑补
}
}
/**
* 终极炸弹 (就这么俗)
*/
class UltraBomb implements SuperModuleInterface
{
public function activate(array $target)
{
// 这只是个例子。。具体自行脑补
}
}
~~~
现在,当我们初始化 “超人” 类的时候,提供的模组实例必须是一个 SuperModuleInterface 接口的实现。
~~~
class Superman
{
protected $module;
public function __construct(SuperModuleInterface $module)
{
$this->module = $module;
}
}
~~~
## IOC(控制反转,是一种思想)
我们不应该手动在 “超人” 类中固化了他的 “超能力” 初始化的行为,而转由外部负责,由外部创造超能力模组、装置或者芯片等(我们后面统一称为 “模组”),植入超人体内的某一个接口,这个接口是一个既定的,只要这个 “模组” 满足这个接口的装置都可以被超人所利用,可以提升、增加超人的某一种能力。
> **这种由外部负责其依赖需求的行为,我们可以称其为 “控制反转(IoC)。**
- 代码规范
- 编程规范(psr-1,2)
- 编程规范(原作者的建议)
- JS篇
- 正则校验
- 检测密码强度
- 常用方法
- 页面下载文件
- 手机类型判断
- 字符串截取方法
- 全选/全不选
- js 判断浏览器
- JS判断两个日期大小
- JS 执行计时器
- 回车提交
- 阻止冒泡
- js每3位用逗号隔开的形式
- JS跟APP端交互
- 常用的工具类
- PHP地理位置计算
- 百度地图两点坐标距离计算
- 生成唯一ID
- 身份证验证类
- 阿拉伯数字转化为大写
- 获取汉字首个拼音
- PHP中文转拼音
- Rand类库
- PHP Date()函数详细参数
- 时间
- PHP每3位用逗号隔开的形式
- Elasticsearch全文搜索引擎
- 全文搜索引擎 Elasticsearch
- 设计模式
- 单例模式
- 依赖注入VS控制反转
- 工厂模式
- Gitlab
- git常用命令
- PHPStorm关联gitlab
- Thinkphp5
- 工具类
- 扩展
- think-queue——ThinkPHP队列扩展
- qr-code——好用的二维码生成类库
- ThinkPHP5 社会化登录组件
- PHP SDK——助力支付宝小程序后端开发
- tp5.0使用predis访问redis集群
- tp5+swoole
- 网络知识
- HTTP知识
- 小程序
- 知识推荐