PHP 7.4 引入了屬性的類型提示,強調需要提供所有屬性的有效值。但是,存取屬性而不分配它們可能會導致錯誤,因為未定義的屬性與聲明的類型不符。
考慮以下程式碼:
class Foo { private int $id; private ?string $val; private DateTimeInterface $createdAt; private ?DateTimeInterface $updatedAt; public function __construct(int $id) { $this->id = $id; } }
在分配$val 之前嘗試存取它將導致:
Fatal error: Typed property Foo::$val must not be accessed before initialization
要解決此問題,請指派與聲明類型相符的值作為預設值或在構造過程中。例如:
class Foo { private int $id; private ?string $val = null; private ?DateTimeInterface $updatedAt; public function __construct(int $id) { $this->id = $id; $this->createdAt = new DateTimeImmutable(); $this->updatedAt = new DateTimeImmutable(); } }
這可確保所有屬性都具有有效值,從而消除錯誤。
處理 ID 等自動產生的值時,將屬性宣告為私有 ?int $id =建議為空。對於其他沒有具體指派的屬性,請根據其類型選擇適當的預設值。
以上是為什麼 PHP 會拋出「初始化之前不得存取類型化屬性」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!