PHP 依赖注入,依赖反转 (IOC-DI)

PHP 依赖注入,依赖反转 (IOC-DI),第1张

概述https://my.oschina.net/u/3529405/blog/1821744<?php/***依赖注入IOCDI*参考文章*https://segmentfault.com/a/1190000002411255*https://segmentfault.com/a/1190000002424023*//***IOC*控制反转InversionofControl*依赖关系的转移*依赖抽

https://my.oschina.net/u/3529405/blog/1821744

<?PHP/** * 依赖注入 IOC DI * 参考文章 * https://segmentfault.com/a/1190000002411255 * https://segmentfault.com/a/1190000002424023 *//** * IOC * 控制反转 Inversion of Control * 依赖关系的转移 * 依赖抽象而非实践 * 比较实用的注入方式有三种 * Setter injection 使用setter方法 * Constructor injection 使用构造函数 * Property Injection 直接设置属性 */// IOC 栗子// 假设一个储存业务// 定义接口 业务需求一个数据储存 到rIDes 或者 MysqL 中interface SaveIO {    public function set ();}// 定义两种储存方式 并继承(implements)SaveIO 接口// rIDesclass RIDesClass implements SaveIO {    public function set () {        echo 'rIDes_save'.PHP_Eol;    }}// MysqLclass MysqLClass implements SaveIO {    public function set (){        echo 'MysqL_save'.PHP_Eol;    }}// 高层业务class Business {    private $myBusiness;    public function __construct ($ioc) {        $this->myBusiness = $ioc;    }    public function save () {        $this->myBusiness->set();    }    // 替换依赖    public function replaceIOC ($ioc) {        $this->myBusiness = $ioc;    }}echo 'IOC------'.PHP_Eol;$bus = new Business(new RIDesClass());$bus->save(); // 输出rIDes_save// 替换成其他依赖$bus->replaceIOC(new MysqLClass());$bus->save(); // 输出 MysqL_save/** * DI * 依赖注入 Dependency Injection * 容器自动根据配置,将依赖注入指定对象 * 管理应用程序中的『全局』对象(包括实例化、处理依赖关系)。 * 可以延时加载对象(仅用到时才创建对象)。 * 促进编写可重用、可测试和松耦合的代码。 */// 首先需要一个容器class ConComponent {    protected $_di = array();    // 注册 依赖 让依赖存储在$_di 存储形式 $_di->['服务名称']->Closure    public function register ($name,$service) {        $this->_di[$name] = $service;    }    /**     * public function save ($name)     * 高层业务,可以另外拓展一个类,不要放在容器里     * (这里只是一个简易的写法,但是不要这样写)     * 实现 class{     * $构造函数=容器返回依赖     * 高层业务根据需求     * 通过$_di[classname]()创建依赖类     * 通过$_di[classname]()->实现业务     * }     * @param $name     */    public function save ($name) {       $this->_di[$name]()->set();    }}/* * 重复利用 RedisClass MysqLClass * 注册依赖 * */$component = new ConComponent(); // 创建容器/* * 注册依赖 * @param name 依赖的名称 * @param function(){} 是一个闭包(closure) * 所以只有在我们调用一次 $component->_di[name] * 才会创建一个依赖对象 实现需时创建 * */$component->register('RedisClass',function () {    return new RIDesClass();});$component->register('MysqLClass',function () {    return new MysqLClass();});echo 'di----'.PHP_Eol;$component->save('RedisClass'); // 输出rIDes_save$component->save('MysqLClass'); // 输出MysqL_save/** * AOP * Aspect-orIEnted programming * 面向方面编程 * 无需修改任何一行程序代码, * 将功能加入至原先的应用程序中, * 也可以在不修改任何程序的情况下移除 */

 

总结

以上是内存溢出为你收集整理的PHP 依赖注入,依赖反转 (IOC-DI)全部内容,希望文章能够帮你解决PHP 依赖注入,依赖反转 (IOC-DI)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1001553.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存