在 Magento 2.4.6 中,我尝试使用构造函数属性启动子以及带有可选参数的依赖注入,但它不起作用并给出了错误。但当我尝试使用传统方法时,它就起作用了。如果有人可以解释为什么它不起作用,以及我是否可以做些什么来使它起作用。 PHP 版本是 8.1.4
这段代码运行良好
private $optional;
public function __construct(
private MethodInjection $methodInjection,
Optional $optional = null,
private array $data = []
) {
$this->optional = $optional;
}
但是当我尝试使用它时它不起作用
public function __construct(
private MethodInjection $methodInjection,
private Optional $optional = null,
private array $data = []
) {
}`
当我尝试运行 setup:upgrade 时,我收到一条错误消息,指出依赖项注入不能为空。
错误“PHP 致命错误:无法使用 null 作为参数的默认值”告诉您需要了解的一切。
您告诉 PHP 参数
$optional
将是类类型 Optional
的对象,但您给它的值是 null
,它当然既不是对象,也不是类类型 Optional
。
如果您也希望能够使用空值,您应该在类型声明前面加上问号,如下所示:
private ?Optional $optional = null,
这告诉 PHP
$optional
参数也可为空,因此接受 null
和 Optional
类中的对象作为有效输入。