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