php - 构造函数依赖注入(inject)如何在 Laravel 中工作?

标签 php laravel dependency-injection

我正在使用 Laravel。我知道我们可以像下面的代码那样编写构造函数依赖注入(inject)。我想知道它是如何工作的? 我的意思是构造函数如何获取 $post 和 $user 模型对象?它是如何注入(inject)的?

    /**
     * Inject the models.
     * @param Post $post
     * @param User $user
     */
    public function __construct(Post $post, User $user)
    {
        parent::__construct();

        $this->post = $post;
        $this->user = $user;
    }

请解释一下。谢谢。

最佳答案

Laravel IoC 使用了一个名为 的进程。 Autowiring .这在其他语言和其他 PHP IoC 容器中非常常见。

想法是使用 PHP 的 Reflection API 查看构造函数参数。 .使用它,Laravel 可以看到 $post需要是 Post实例,因此它将动态创建它。简而言之,Laravel 会做这样的事情:

$post = new Post();
$user = new User();
$obj = new TheClass($post, $user);

(如果您想知道它如何找到 Post 类:Composer 自动加载器将根据您在 composer.json 中的配置自动加载它)

此过程适用于 服务 (即“实用程序”类,如数据库、记录器等),但它不适用于 型号 类。

原因很简单:Laravel 无法知道 其中您要注入(inject)的帖子和用户(假设您的数据库中有多个)。相反,您应该从数据库中获取这些实例并自己传递它们。

关于php - 构造函数依赖注入(inject)如何在 Laravel 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27478058/

相关文章:

c# - 依赖注入(inject)模式下设计的基本原则是什么

php - 从 PHP REST Web 服务返回 JSON 结果

php - 迷你购物车更改未生效 - Magento 2

php - 无法扩展 Zizaco\Confide\Confide 用户

dependency-injection - F# 中用于验收测试的模拟函数

asp.net-mvc - 自动延迟解析 CaSTLe Windsor 中的组件

php - MYSQL PHP PDO 事务中的语句顺序

sql - Laravel - 播种大型 SQL 文件

php - 将 Laravel 资源合并为一个

laravel - 如何在 Laravel 5.8 的 Artisan 命令中使用 ENV 变量?