タイプヒントのあるプロパティの「型指定されたプロパティは初期化前にアクセスしてはなりません」エラーを理解する
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 中国語 Web サイトの他の関連記事を参照してください。