ホームページ >バックエンド開発 >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 などの自動生成値を扱う場合、プロパティを private ?int $id = として宣言します。 null を推奨します。特定の割り当てがないその他のプロパティの場合は、そのタイプに基づいて適切なデフォルト値を選択します。

以上がPHP が「初期化前に型指定されたプロパティにアクセスしてはなりません」をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。