laravel核心之ioc容器
2016-04-11 18:14
573 查看
使用ioc(控制反转)容器的目的就是为了降低DI(依赖注入);
当我们调用
执行此函数,返回值为superman对象,其参数为
此函数返回XPower对象。new superman时得到参数,也返回superman对象,
class Container { protected $binds; protected $instances; public function bind($abstract, $concrete) { if ($concrete instanceof Closure) { #如果$concrete是一个闭包即匿名函数的话两个参数以键值对的形式存入$binds数组 $this->binds[$abstract] = $concrete; } else { $this->instances[$abstract] = $concrete; } } public function make($abstract, $parameters = []) { if (isset($this->instances[$abstract])) { return $this->instances[$abstract]; } #将当前对象,即Container放入参数列表的开头部分 array_unshift($parameters, $this); #调用对应$abstract的$concrete,将此闭包的返回值返回。 return call_user_func_array($this->binds[$abstract], $parameters); } }
# 向该超级工厂添加超人的生产脚本 $container->bind('superman', function($container, $moduleName) { return new Superman($container->make($moduleName)); }); # 向该超级工厂添加超能力模组 的生产脚本 $container->bind('xpower', function($container) { return new XPower; }); # 开始启动生产, $superman_1 = $container->make('superman', 'xpower');
当我们调用
$superman_1 = $container->make('superman', 'xpower');方法时,会调用之前注册在
$binds数组上的键名为
$superman的值,且传递参数为
[当前对象,xpower],键名为
$superman的值即为
function($container, $moduleName) { return new Superman($container->make($moduleName)); }
执行此函数,返回值为superman对象,其参数为
$container->make($moduleName),
$moduleName即为xpower,此时会递归的调用make方法,即又执行了之前绑定在
$binds数组中的键为xpower的值,且参数为
[当前对象],键为xpower的值即
function($container) { return new XPower; }
此函数返回XPower对象。new superman时得到参数,也返回superman对象,
$superman_1 = $container->make('superman', 'xpower');以上为这行代码的执行过程,
相关文章推荐
- php安装PDO_ODBC驱动
- 使用fscok实现异步调用PHP
- PHP 上传图片和安全处理
- 面向对象编程的关键点(用php实现面向对象的、变化跟不变化进行伪代码逻辑进阶编程)
- PHP CI框架email类发送邮件
- PHPCMS V9 非超级管理员批量移动权限
- 在Debian上用Wu- ftpd配置FTP服务器
- 夺命雷公狗---Thinkphp----6之管理员的增删改查之-未验证
- 关于intent.getParcelableArrayListExtra()报NullPointerException总结
- 解决FlashFXP登录FTP时候卡在MLSD
- 在PHP中使用协程实现多任务调度
- PHP PSR-4 Autoloader 自动加载(中文版)
- 用php写ftp爬虫
- PHP PSR-3 日志接口规范 (中文版)
- PHP PSR-2 代码风格规范 (中文版)
- PHP PSR-1 基本代码规范(中文版)
- thinkphp随笔
- php程序完成论坛源码!
- 青蛙跳100级台阶算法,完整可运行,php版本
- php框架--CodeIgniter