我在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();
}
}
这样可行。
我在这里缺少什么?我做错了什么?
答案 0 :(得分:1)
对于第一个例子:
$myObject = new MainClass();
预计会出现错误。您不能为具有带类型参数的构造函数的类调用空构造函数。
对于第二个示例(调用具有初始化对象作为参数的构造函数,该函数失败):
编辑:在原始问题中添加了细节。
示例3没问题。