在php-8和更高版本中,下面的代码可以工作
class Foo {
public function __construct(string $string = null) {}
}但是在php-8中,除了属性提升之外,它还引发了一个错误。
class Foo {
public function __construct(private string $string = null) {}
}致命错误:不能将null用作字符串类型的参数$string的默认值
但是,使字符串可以为空工作。
class Foo {
public function __construct(private ?string $string = null) {}
}那么,这也是一种错误,还是有意的行为?
发布于 2020-10-22 05:03:28
...because提升参数意味着属性声明,必须显式声明空值,并且不从空默认值推断: 类测试{ //错误:对非空属性使用空默认值-公共函数__construct(公共类型$prop =空) {} //更正:使类型显式为可空,而使公共函数__construct(public ?Type $prop = null) {} }
发布于 2020-10-22 05:05:11
这不是虫子!
class Foo {
public function __construct(private string $string = null) {}
}上面的代码是一个简短的语法
class Foo {
private string $string = null;
public function __construct(string $string) {
$this->string = $string;
}
},这会产生致命错误。
致命错误:类型字符串的属性的默认值可能不是null。
因此,您无法初始化NULL不可空的类型化属性。
https://stackoverflow.com/questions/64475517
复制相似问题