理解laravel---1.2 控制反转2
Posted zhuxineli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解laravel---1.2 控制反转2相关的知识,希望对你有一定的参考价值。
在php运行时,扩展分析程序,导出或提出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取信息以及动态调用方法的功能称为反射API.
<?php
/**
* @author zhuxinlei
* @date 2020-06-12
* @desc 我是类A的注释
*/
class A
//我是构造函数的注释
public function __construct(B $b)
$this->b = $b;
//我是getB的注释
public function getB()
$this->b->bMethod();
class B
public function __construct(C $c,D $d)
$this->c = $c;
$this->d = $d;
public function bMethod()
echo "我是B中的方法bMethod()";
class C
public function __construct()
public function cMethod()
echo "我是C中的方法cMethod()";
class D
public function __construct()
public function dMethod()
echo "我是D中的方法dMethod()";
class Ioc
protected $instances = [];
public function __construct()
public function getInstance($abstract)
//获取类的反射信息,也就是类的所有信息
$reflector = new ReflectionClass($abstract);
// echo $reflector->getDocComment(); 获取类的注释信息
//获取反射类的构造函数信息
$constructor = $reflector->getConstructor();
//获取反射类的构造函数的参数
$dependencies = $constructor->getParameters();
if(!$dependencies)
return new $abstract();
foreach ($dependencies as $dependency)
if(!is_null($dependency->getClass()))
$p[] = $this->make($dependency->getClass()->name);
//这里$p[0]是C的实例化对象,$p[1]是D的实例化对象
//创建一个类的新实例,给出的参数将传递到类的构造函数
return $reflector->newInstanceArgs($p);
public function make($abstract)
return $this->getInstance($abstract);
$ioc = new Ioc();
$a = $ioc->make('A');
$a->getB();
以上是关于理解laravel---1.2 控制反转2的主要内容,如果未能解决你的问题,请参考以下文章