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

Barbara Streisand
发布: 2024-11-17 04:32:03
原创
882 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板