php中依赖注入的问题[关闭]

问题描述 投票:1回答:1

我在这里查看了问题,并尝试相应地修改代码,但我很难理解为什么这不起作用。

我的命名空间中有一个类,我想使用另一个类中的另一个类的方法。所以我尝试过:

<?php

namespace Main_Namespace\My_Namespace;

use Other_Namespace\Cool_Class;

class Main_Class {

    protected $cool_class;

    public function __construct( Cool_Class $cool_class ) {
        $this->cool_class = $cool_class;
    }

    public test_method() {
        $some_boolean = $this->cool_class->some_method_that_returns_bool();        
    }
}

我用new MainClass()在其他地方实例化它。

这失败了,告诉我

PHP致命错误:未捕获的TypeError:传递给Main_Namespace的参数1 \ My_Namespace \ Main_Class :: __ construct()必须是Other_Namespace \ Cool_Class的实例,没有给定,在...中调用

我甚至尝试过

use Other_Namespace\Cool_Class;

$cool_class_instance = new Cool_Class();

new Main_Class( $cool_class_instance );

不能正常工作(我想我找不到课程错误)。

现在,如果我没有在构造函数中实例化,而是在类似的方法内部

<?php

namespace Main_Namespace\My_Namespace;

use Other_Namespace\Cool_Class;

class Main_Class {

    public test_method() {
        $cool_class = new Cool_Class();

        $some_boolean = $cool_class->some_method_that_returns_bool();        
    }
}

这会奏效。

我在这里错过了什么?我究竟做错了什么?

php oop dependency-injection
1个回答
1
投票

对于第一个例子:

$myObject = new MainClass();

你得到的错误是预期的。对于具有带类型参数的构造函数的类,不能调用空构造函数。

对于第二个示例(调用具有初始化对象作为参数的构造函数,该函数失败):

编辑:添加原始问题中缺少的详细信息。

  1. 请指定您收到的确切错误消息 - 类加载错误
  2. 请指定PHP版本 - 7.1
  3. 请提供自定义自动加载器 - 评论链接。

I suggest to debug the autoloader by dumping the values it is processing.

例3没问题。

© www.soinside.com 2019 - 2024. All rights reserved.