首頁 >後端開發 >php教程 >為什麼我在 PHP 中收到「初始化之前不得存取類型化屬性」錯誤?

為什麼我在 PHP 中收到「初始化之前不得存取類型化屬性」錯誤?

Susan Sarandon
Susan Sarandon原創
2024-11-16 20:48:03857瀏覽

Why Do I Get a

了解帶有類型提示的屬性中的「初始化前不得存取類型化屬性」錯誤

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

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