インスタンスと静的: 一般的な初期化エラーをわかりやすく理解する
ソフトウェア開発では、クラスにインスタンスと静的メンバーの両方が含まれることがよくあります。インスタンス メンバーはクラスの個々のインスタンスに関連付けられますが、静的メンバーはすべてのインスタンス間で共有されます。
インスタンス メンバーを使用する場合は、フィールド初期化子の制限を理解することが重要です。フィールド初期化子は、インスタンスの作成時にインスタンス フィールドに値を割り当てるために使用されます。ただし、エラー メッセージ「フィールド初期化子は非静的フィールド、メソッド、またはプロパティを参照できません」に記載されているように、フィールド初期化子は非静的メンバーを参照できません。
元のコード分析
あなたが提供したコードは、この制限を示しています。 Service クラスには、インスタンス フィールド リポジトリと、インスタンス リポジトリで非静的メソッド GetDinner の呼び出しを試みるフィールド初期化子が含まれています。インスタンスが完全に初期化される前にフィールド初期化子が非静的メンバーにアクセスしようとしているため、これによりエラーがスローされます。
解決策
一般的な解決策は 2 つあります。この問題:
ベスト プラクティス
どちらの解決策も有効ですが、通常はコンストラクターの初期化が推奨されると考えられています。アプローチ。これは、柔軟性が向上し、必要に応じて他のインスタンス フィールドを初期化できるためです。
非静的メンバーに対するフィールド初期化子の使用を回避することで、初期化エラーを防ぎ、コードが意図したとおりに動作することを保証できます。 .
以上が私のフィールド初期化子が非静的メンバーにアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。