理解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的主要内容,如果未能解决你的问题,请参考以下文章

c#依赖注入和控制反转的书籍

什么叫控制反转

2-形象理解SpringIOC(控制反转)

Spring4——IOC控制反转 (概念理解)

Spring技术笔记

“依赖注入”,“控制反转”是指啥?