laravel 自动new一个对象是怎么实现的呢
laravel 自动new一个对象是怎么实现的呢
有没有讲解laravel实现依赖注入的文章,或源码解读
public function __construct(Contract $contract,OwnerRepository $owner)
{
$this->model = $contract;
$this->owner = $owner;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
利用反射,将DI模式注入的参数动态的生成相应的对象
设计模式
IoC 模式
bind
绑定接口和生成相应的回调函数
如果参数 $concrete 为一个回调函数,则直接将回调函数与服务名称$abstract 进行绑定
如果参数 $concrete 为一个名称,则首先需要通过 getClosure() 函数创建服务回调函数,然后将回调函数与服务名称绑定,总之需要实现一个可以生成相应服务实例对象的回调函数与服务名称进行绑定。
make 服务解析
abstract 服务名称
concrete 服务名称的实体
可以将其分为两个步骤来完成,一个是完成对应服务的查找,另一个是完成服务的实现,一般是指完成实例化对象的创建。两个步骤分别由make() 和 build() 函数完成。
build
实例化对象(对象的创建)
如果服务实体就是一个闭包函数,则直接调用该闭包函数完成服务实例化对象的创建
如果服务实体只是一个具体类的类名,则需要通过反射机制来完成实例化对象的创建。