ホームページ > バックエンド開発 > PHPチュートリアル > PHP で「初期化前に型指定されたプロパティにアクセスしてはなりません」というエラーが表示されるのはなぜですか?

PHP で「初期化前に型指定されたプロパティにアクセスしてはなりません」というエラーが表示されるのはなぜですか?

Susan Sarandon
リリース: 2024-11-16 20:48:03
オリジナル
864 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート