web-dev-qa-db-ja.com

プロパティタイプのヒントを導入すると、「初期化前に型付きプロパティにアクセスしてはならない」というエラーが突然表示されるのはなぜですか。

次のように、新しく導入されたプロパティタイプのヒントを利用するようにクラス定義を更新しました。

class Foo {

    private int $id;
    private ?string $val;
    private DateTimeInterface $createdAt;
    private ?DateTimeInterface $updatedAt;

    public function __construct(int $id) {
        $this->id = $id;
    }


    public function getId(): int { return $this->id; }
    public function getVal(): ?string { return $this->val; }
    public function getCreatedAt(): ?DateTimeInterface { return $this->createdAt; }
    public function getUpdatedAt(): ?DateTimeInterface { return $this->updatedAt; }

    public function setVal(?string $val) { $this->val = $val; }
    public function setCreatedAt(DateTimeInterface $date) { $this->createdAt = $date; }
    public function setUpdatedAt(DateTimeInterface $date) { $this->updatedAt = $date; }
}

しかし、Doctrineにエンティティを保存しようとすると、次のエラーが表示されます:

初期化する前に型付きプロパティにアクセスしてはなりません

これは$idまたは$createdAtだけでなく、$valueまたは$updatedAt、null許容プロパティです。

19
yivi

Null許容型付きプロパティの場合、構文を使用する必要があります

private ?string $val = null;

そうしないと、致命的なエラーがスローされます。

この概念は不必要な致命的なエラーにつながるため、バグレポート https://bugs.php.net/bug.php?id=7962 -を作成しましたが、成功しませんでしたが、少なくとも試しました。 ..

0
Hhyperion