了解帶有類型提示的屬性中的「初始化前不得存取類型化屬性」錯誤
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中文網其他相關文章!