laravel 自动new一个对象是怎么实现的呢

laravel 自动new一个对象是怎么实现的呢
有没有讲解laravel实现依赖注入的文章,或源码解读


public function __construct(Contract $contract,OwnerRepository $owner)
{
        $this->model = $contract;
        $this->owner = $owner;
}
阅读 5.6k
2 个回答

利用反射,将DI模式注入的参数动态的生成相应的对象

设计模式
IoC 模式

bind
绑定接口和生成相应的回调函数
如果参数 $concrete 为一个回调函数,则直接将回调函数与服务名称$abstract 进行绑定
如果参数 $concrete 为一个名称,则首先需要通过 getClosure() 函数创建服务回调函数,然后将回调函数与服务名称绑定,总之需要实现一个可以生成相应服务实例对象的回调函数与服务名称进行绑定。

make 服务解析
abstract 服务名称
concrete 服务名称的实体
可以将其分为两个步骤来完成,一个是完成对应服务的查找,另一个是完成服务的实现,一般是指完成实例化对象的创建。两个步骤分别由make() 和 build() 函数完成。

build
实例化对象(对象的创建)
如果服务实体就是一个闭包函数,则直接调用该闭包函数完成服务实例化对象的创建
如果服务实体只是一个具体类的类名,则需要通过反射机制来完成实例化对象的创建。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题