Home  >  Q&A  >  body text

怎么能通俗易通的了解php中的反射和依赖注入这两个概念

求大神指点,谢谢

大家讲道理大家讲道理2724 days ago534

reply all(11)I'll reply

  • 怪我咯

    怪我咯2017-04-11 09:11:01

    只是名字比较唬人,其实很简单
    反射其实就是获取类的信息(把类也看成是对象,然后通过反射类获取这个对象的一些属性), 你比如说有个发送邮件的类。

    <?php 
    class MailerService
    {
        public $mail;
        
        public function __construct(Mailer $mail)
        {
           $this->setHandle($mail);
        }
        
        public function setHandle(Mailer $mail)
        {
             $this->mail = $mail;
        }
    }

    比如说:
    我想知道这个类有哪些方法, 那我可以这样:

    <?php 
    $class = new ReflectionClass('MailerService');
    $methods = $class->getMethods();

    我想知道这个类的构造函数要传什么参数

    <?php 
    $method = new ReflectionMethod('MailerService', '__construct');
    $paramters = $method->getParameters();

    一言以蔽之, 反射就是获取类的信息的.

    控制反转也很好理解,不过要先搞清楚, 控制反转和依赖注入不是一回事.
    控制反转是一种目的,而实现方法之一就是依赖注入.
    所谓的依赖注入就是不自己new class了, 而是由一个专门的类去做, 由这个类去解决类的依赖的问题,比如上面的MailerService类就依赖Mailer类, 这个专门的类会通过反射去获取MailerService类的构造函数需要什么参数,这个需要的参数也叫作依赖, 然后解决依赖. 这个就叫依赖注入. 一般通过依赖注入的方式来实现控制反转. 上述的那个专门的类一般也叫服务容器.

    reply
    0
  • Cancelreply