怪我咯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类的构造函数需要什么参数,这个需要的参数也叫作依赖, 然后解决依赖. 这个就叫依赖注入. 一般通过依赖注入的方式来实现控制反转. 上述的那个专门的类一般也叫服务容器.