php - 如何根据 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 有什么区别?
解决方案
推荐阅读
- c++ - upper_bound 如何与自定义对象类型 val 一起工作?
- sass - 如何将 Sass 变量导出到 Javascript?
- vue.js - 添加 , 到数字输入框 vue
- xampp - XAMPP 无法打开 PHP 文件
- mysql - 如何在 MySQL 5.7 中使用变量实现按功能分区
- rust - 启用项目功能时启用 Rust nightly 功能
- c# - 如何在特定时间触发 .NET Core 3.1 托管服务?
- matlab - 多次单击鼠标
- serverless-framework - ServerlessError:未找到无服务器插件“sls”
- laravel - 未定义变量:jum(查看:C:\laragon\www\mobilenew\resources\views\home.blade.php)