首页  >  文章  >  后端开发  >  为什么我在 PHP 中收到“初始化之前不得访问类型化属性”错误?

为什么我在 PHP 中收到“初始化之前不得访问类型化属性”错误?

Susan Sarandon
Susan Sarandon原创
2024-11-16 20:48:03775浏览

Why Do I Get a

了解带有类型提示的属性中的“初始化前不得访问类型化属性”错误

PHP 7.4 引入了属性的类型提示,需要正确初始化所有属性。当属性缺少指定值时,它会保持未定义状态,可能与其声明的类型冲突。

例如,如果我们声明:

class Foo {
    private int $id;
    private ?string $val;
    private DateTimeInterface $createdAt;
    private ?DateTimeInterface $updatedAt;
}

在没有事先初始化的情况下访问 $val会导致错误:“初始化之前不得访问类型化属性 Foo::$val。”这是因为 $val 在访问时既不是字符串也不是 null。

要解决此问题,请为所有属性分配有效值,无论是作为默认值还是在构造期间。对于上面的例子,我们可以使用:

class Foo {
    private int $id;
    private ?string $val = null;
    private Collection $collection;
    private DateTimeInterface $createdAt;
    private ?DateTimeInterface $updatedAt;

    public function __construct(int $id) {
        // Setting default values for other properties
        $this->id = $id;
        $this->createdAt = new DateTimeImmutable();
        $this->updatedAt = new DateTimeImmutable();

        $this->collection = new ArrayCollection();
    }
}

通过这样做,所有属性都有有效值并且实例处于有效状态。

依赖时通常会发生此错误数据库生成的值,例如 ID 或时间戳。对于自动生成的 ID,建议将类型声明更改为 private ?int $id = null。对于其他值,请选择与属性类型匹配的合适默认值。

以上是为什么我在 PHP 中收到“初始化之前不得访问类型化属性”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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