PHP 7.4 引入了属性的类型提示,强调需要提供所有属性的有效值。但是,访问属性而不分配它们可能会导致错误,因为未定义的属性与声明的类型不匹配。
考虑以下代码:
class Foo { private int $id; private ?string $val; private DateTimeInterface $createdAt; private ?DateTimeInterface $updatedAt; public function __construct(int $id) { $this->id = $id; } }
在分配 $val 之前尝试访问它将导致:
Fatal error: Typed property Foo::$val must not be accessed before initialization
要解决此问题,请分配与声明类型匹配的值作为默认值或在构造过程中。例如:
class Foo { private int $id; private ?string $val = null; private ?DateTimeInterface $updatedAt; public function __construct(int $id) { $this->id = $id; $this->createdAt = new DateTimeImmutable(); $this->updatedAt = new DateTimeImmutable(); } }
这可确保所有属性都具有有效值,从而消除错误。
处理 ID 等自动生成的值时,将属性声明为私有 ?int $id =建议为空。对于其他没有具体分配的属性,请根据其类型选择适当的默认值。
以上是为什么 PHP 会抛出“初始化之前不得访问类型化属性”?的详细内容。更多信息请关注PHP中文网其他相关文章!