ホームページ  >  記事  >  バックエンド開発  >  PHPにおける静的プロパティとメソッドの継承の問題

PHPにおける静的プロパティとメソッドの継承の問題

WBOY
WBOYオリジナル
2016-07-06 13:51:321172ブラウズ

インターネット上の静的プロパティとメソッドの継承に関しては、答えはすべて奇妙なので、コードで直接試してみました:

リーリー

では、php における静的継承とは正確には何でしょうか? Javaなど他の言語と静的継承の動作に違いはありますか?親クラスの静的プロパティとメソッドはオーバーライドされますか?継承後の静的プロパティのコピーは 1 つだけですか?継承実装の原則は何ですか?

返信内容:

インターネット上では、静的プロパティとメソッドの継承に関する質問に対する答えは、あらゆる種類の奇妙なものなので、コードを使用して直接試してみました:

リーリー

では、php における静的継承とは正確には何でしょうか? Javaなど他の言語と静的継承の動作に違いはありますか?親クラスの静的プロパティとメソッドはオーバーライドされますか?継承後の静的プロパティのコピーは 1 つだけですか?継承実装の原則は何ですか?

いくつかのポイントに分けてみましょう:

1. 静的メンバーはアクセス制御キーワードを使用して変更でき、継承および書き換えが可能です
つまり、サブクラスは親クラスの静的変数とメソッドを継承できます...「キーワード」ルールに従います

2. サブクラスがオーバーライドしない場合、サブクラスは実際に親クラスの静的メソッドを呼び出します
これも、継承の基本ルールについて説明する必要はありません。

3. 静的メンバーホルダーはオブジェクトではなくクラスであるため、クラスの複数のインスタンスは同じ静的属性を共有します。あるインスタンスの静的属性を変更すると、別のインスタンスの静的属性に影響しますこれが重要なポイントです。 , 単一列モードでもこの機能が使用されることをよく理解してください。

つまり、コード内の self::$var とparent::$var は、実際には親クラスの $var を指していることになります。

最後に例を示します:

シングルトン モードでは、$var はデータベース接続として理解でき、親クラスが接続を生成した後、継承されたサブクラスはこの接続を直接使用してデータベースに接続できます。
しかし、サブクラスがそれ自体で接続 $var を生成する場合、それを使用するときにそれが self::$var であるか、parent::$var であるかを区別する必要があります。これは、2 つの値が異なる可能性があるためです。接続されているデータベースも異なります。それがマスターとスレーブだったらどうでしょうか。ははは。

コーディングを楽しんでください~

このような質問には、ここで何度か答えています。読めばわかります。

はい、静的属性のコピーは 1 つだけです。

そのため、静的属性を使用してシングルトン パターンを記述する場合は注意してください。

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