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

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

Barbara Streisand
リリース: 2024-11-17 04:32:03
オリジナル
970 人が閲覧しました

Why Am I Getting the

プロパティ タイプ ヒント追加後の「型付きプロパティは初期化前にアクセスしてはなりません」エラー

PHP クラスにプロパティ タイプ ヒントを導入すると、次のようなエラーが発生する場合があります。 , 「初期化前に型指定されたプロパティにアクセスしてはなりません。」このエラーは、宣言された型と一致する有効な値でプロパティが初期化される前にプロパティにアクセスすると発生します。

原因

PHP 7.4 のプロパティのタイプヒントによれば、すべてのプロパティには次のプロパティが必要です。宣言された型と一致する値。未割り当てのプロパティは未定義の状態にあり、宣言された型 (null であっても) に一致しません。

次のコードを考えてみましょう。

class Foo {

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

    // Getters and setters omitted for brevity...
}

$f = new Foo(1);
$f->getVal(); // Error: Typed property Foo::$val must not be accessed before initialization
ログイン後にコピー

この例では、文字列または null 値を割り当てずに $val プロパティにアクセスすると、最初にエラー。

解決策

デフォルト値:

宣言時にプロパティにデフォルト値を割り当てることができます:

class Foo {

    private ?string $val = null; // Default null value for optional property
}
ログイン後にコピー

コンストラクター初期化:

コンストラクター内のプロパティの初期化:

class Foo {

    public function __construct(int $id) {
        // Assign values to all properties
        $this->id = $id;
        $this->createdAt = new DateTimeImmutable();
        $this->updatedAt = new DateTimeImmutable();
    }
}
ログイン後にコピー

Null 許容型:

オプションのプロパティの場合は、Null 許容として宣言します。

private ?int $id;
ログイン後にコピー

DB が生成されました値 (自動生成された ID):

データベースによって初期化されるプロパティには null 許容型を使用します:

private ?int $id = null;
ログイン後にコピー

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

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