首頁 >後端開發 >php教程 >為什麼 PHP 會拋出「初始化之前不得存取類型化屬性」?

為什麼 PHP 會拋出「初始化之前不得存取類型化屬性」?

Barbara Streisand
Barbara Streisand原創
2024-11-17 07:05:03308瀏覽

Why Does PHP Throw

為什麼屬性類型提示會出現「初始化前不能存取類型化屬性」錯誤

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn