构造函数属性启动器和普通构造函数参数之间的区别

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

在 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 magento2
1个回答
0
投票

错误“PHP 致命错误:无法使用 null 作为参数的默认值”告诉您需要了解的一切。

您告诉 PHP 参数

$optional
将是类类型
Optional
的对象,但您给它的值是
null
,它当然既不是对象,也不是类类型
Optional

如果您也希望能够使用空值,您应该在类型声明前面加上问号,如下所示:

private ?Optional $optional = null,

这告诉 PHP

$optional
参数也可为空,因此接受
null
Optional
类中的对象作为有效输入。

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