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

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

Barbara Streisand
Barbara Streisand原创
2024-11-17 04:32:03879浏览

Why Am I Getting the

添加属性类型提示后出现“初始化前不得访问类型化属性”错误

在 PHP 类中引入属性类型提示时,您可能会遇到错误提示,“在初始化之前不得访问类型化属性。”在使用与其声明类型匹配的有效值初始化属性之前访问该属性时,会发生此错误。

原因

根据 PHP 7.4 的属性类型提示,所有属性都必须具有与其声明的类型相匹配的值。未分配的属性处于未定义状态,并且不会匹配任何声明的类型,甚至为 null。

示例

考虑以下代码:

class Foo {

    private int $id;
    private ?string $val;
    private DateTimeInterface $createdAt;
    private ?DateTimeInterface $updatedAt;

    // Getters and setters omitted for brevity...
}

$f = new Foo(1);
$f->getVal(); // Error: Typed property Foo::$val must not be accessed before initialization

在此示例中,访问 $val 属性而不先为其分配字符串或 null 值会抛出错误。

解决方案

默认值:

您可以在声明期间为属性分配默认值:

class Foo {

    private ?string $val = null; // Default null value for optional property
}

构造函数初始化:

在构造函数中初始化属性:

class Foo {

    public function __construct(int $id) {
        // Assign values to all properties
        $this->id = $id;
        $this->createdAt = new DateTimeImmutable();
        $this->updatedAt = new DateTimeImmutable();
    }
}

可为空类型:

对于可选属性,将它们声明为可为空:

private ?int $id;

数据库生成的值(自动生成的 ID):

对数据库初始化的属性使用可空类型:

private ?int $id = null;

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

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