了解带有类型提示的属性中的“初始化前不得访问类型化属性”错误
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中文网其他相关文章!