インターネット上の静的プロパティとメソッドの継承に関しては、答えはすべて奇妙なので、コードで直接試してみました:
リーリーでは、php における静的継承とは正確には何でしょうか? Javaなど他の言語と静的継承の動作に違いはありますか?親クラスの静的プロパティとメソッドはオーバーライドされますか?継承後の静的プロパティのコピーは 1 つだけですか?継承実装の原則は何ですか?
インターネット上では、静的プロパティとメソッドの継承に関する質問に対する答えは、あらゆる種類の奇妙なものなので、コードを使用して直接試してみました:
リーリーでは、php における静的継承とは正確には何でしょうか? Javaなど他の言語と静的継承の動作に違いはありますか?親クラスの静的プロパティとメソッドはオーバーライドされますか?継承後の静的プロパティのコピーは 1 つだけですか?継承実装の原則は何ですか?
いくつかのポイントに分けてみましょう:
1. 静的メンバーはアクセス制御キーワードを使用して変更でき、継承および書き換えが可能です
つまり、サブクラスは親クラスの静的変数とメソッドを継承できます...「キーワード」ルールに従います
2. サブクラスがオーバーライドしない場合、サブクラスは実際に親クラスの静的メソッドを呼び出します
これも、継承の基本ルールについて説明する必要はありません。
3. 静的メンバーホルダーはオブジェクトではなくクラスであるため、クラスの複数のインスタンスは同じ静的属性を共有します。あるインスタンスの静的属性を変更すると、別のインスタンスの静的属性に影響しますこれが重要なポイントです。 , 単一列モードでもこの機能が使用されることをよく理解してください。
最後に例を示します:
シングルトン モードでは、$var はデータベース接続として理解でき、親クラスが接続を生成した後、継承されたサブクラスはこの接続を直接使用してデータベースに接続できます。
しかし、サブクラスがそれ自体で接続 $var を生成する場合、それを使用するときにそれが self::$var であるか、parent::$var であるかを区別する必要があります。これは、2 つの値が異なる可能性があるためです。接続されているデータベースも異なります。それがマスターとスレーブだったらどうでしょうか。ははは。
このような質問には、ここで何度か答えています。読めばわかります。
はい、静的属性のコピーは 1 つだけです。
そのため、静的属性を使用してシングルトン パターンを記述する場合は注意してください。