我在这里查看了问题,并尝试相应地修改代码,但我很难理解为什么这不起作用。
我的命名空间中有一个类,我想使用另一个类中的另一个类的方法。所以我尝试过:
<?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();
}
}
这会奏效。
我在这里错过了什么?我究竟做错了什么?
对于第一个例子:
$myObject = new MainClass();
你得到的错误是预期的。对于具有带类型参数的构造函数的类,不能调用空构造函数。
对于第二个示例(调用具有初始化对象作为参数的构造函数,该函数失败):
编辑:添加原始问题中缺少的详细信息。
例3没问题。