PHP控制反转(IOC)
2022-07-28 15:09:43
124
{{single.collect_count}}

控制翻转:IOC(inversion of control)控制反转模式;控制反转是将对3类(组件间)的依赖关系从程序内部提到外部来管理;

概念理解

我们先来介绍控制反转,依赖注入,这两个概念我们可以认为他们表达的同一种意思,举个通俗的例子,我们用户登录需要提供记录日志的功能,可以选择使用文件或者数据库。下面我们用代码来演示。

// 定义写日志的接口规范interface log{public function write(); }// 文件记录日志class FileLog implements Log{public function write(){echo 'file log write...';} }// 数据库记录日志class DatabaseLog implements Log{public function write(){echo 'database log write...';} }// 程序操作类class User {protected $fileLog;public function __construct(){$this->fileLog = new FileLog(); }public function login(){// 登录成功,记录登录日志echo 'login success...';$this->fileLog->write();}}$user = new User();$user->login();

上面的写法可以实现记录日志的功能,但是有一个问题,假设现在想用数据库记录日志的话,我们就得修改User类,这份代码没达到解耦合,也不符合编程开放封闭原则,那如何修改呢?我们可以把日志处理类通过构造函数方式传递进去。下面我们试着修改User类的代码。

class User {protected $log;public function __construct(Log $log){$this->log = $log; }public function login(){// 登录成功,记录登录日志echo 'login success...';$this->log->write();}}$user = new User(new DatabaseLog());$user->login();

这样想用任何方式记录操作日志都不需要去修改过User类了,只需要通过构造函数参数传递就可以实现,其实这就是“控制反转”。不需要自己内容修改,改成由外部外部传递。这种由外部负责其依赖需求的行为,我们可以称其为 “控制反转(IoC)”。

文本来自 https://laravelacademy.org/post/9782.html

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}