php中依赖注入的问题

时间:2018-03-05 16:42:46

标签: php oop dependency-injection

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

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

<?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();        
    }
}

这样可行。

我在这里缺少什么?我做错了什么?

1 个答案:

答案 0 :(得分:1)

对于第一个例子:

$myObject = new MainClass();

预计会出现错误。您不能为具有带类型参数的构造函数的类调用空构造函数。

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

编辑:在原始问题中添加了细节。

  1. 请指明您收到的确切错误消息 - 类加载错误
  2. 请指定PHP版本 - 7.1
  3. 请在评论中提供自定义自动加载器 - 链接。
  4. 我建议通过转储正在处理的值来调试自动加载器。

    示例3没问题。