首页 > 解决方案 > 如何根据 Laravel 的工作原理制作自己的 PHP IoC/DIC?

问题描述

我有兴趣根据 Laravel 的工作方式为 PHP 编写自己的 IoC/DIC。这纯粹是为了学习,因为它让我感兴趣,我想更好地理解这个概念。

我一直在阅读服务容器Laravel IoC的 Laravel 文档。我理解这个概念以及为什么依赖注入是一种很好的做法,但我没有掌握的是这些功能是如何编码的。

以 Laravel 的这个例子为例:

class UserController extends Controller
{
    /**
     * The user repository implementation.
     *
     * @var UserRepository
     */
    protected $users;

    /**
     * Create a new controller instance.
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }
}

我的问题是如何UserRepository在 PHP 端明智地注入代码?Laravel 框架是如何在后台运行的?我读到 Laravel 可能会使用 PHP 中的反射类来实现这一点,但我不确定?

我也知道还有几种不同的方式来进行依赖注入,例如使用 setter 方法或使用静态函数解析类?我对Pimple Project 很感兴趣并发现它对我的理解很有帮助,但我更喜欢 Laravel 方式如何与自动类注入一起工作,有人可以给我一个简单的例子,我可以开始构建吗?因为 Laravel 的工作方式及其 DIC,没有通过函数调用 UserRepository,它只是被注入?- 这就是我感兴趣的,我如何自己编写代码。

我还读到一个适当的 DIC 将允许您以不同的方式为每个类编写配置,例如 XML 或 PHP 代码,一种在注入之前设置类实例的方法,这是正确的吗?

IoC(控制反转)和DIC(依赖注入容器)之间有什么区别吗?

另外,在这种情况下,Laravel 服务容器和 IoC 有什么区别?

标签: phplaraveldependency-injection

解决方案


推荐阅读