首页 >后端开发 >php教程 >为什么 PHP 会抛出'初始化之前不得访问类型化属性”?

为什么 PHP 会抛出'初始化之前不得访问类型化属性”?

Barbara Streisand
Barbara Streisand原创
2024-11-17 07:05:03323浏览

Why Does PHP Throw

为什么属性类型提示会出现“初始化前不能访问类型化属性”错误

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn