PHP 静的変数の使用の概要_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:33:25
オリジナル
1047 人が閲覧しました

static キーワードは、C# プログラミングで非常に一般的で、特定のオブジェクトではなく型自体に属する静的メンバーを宣言する修飾子として使用されます。 static 修飾子は、クラス、フィールド、メソッド、プロパティ、演算子、イベント、およびコンストラクターで使用できますが、インデクサー、デストラクター、またはクラス以外の型では使用できません。さらに、C# では、静的修飾子がクラスに追加されると、その内部のすべての変数とメソッドが静的になる必要があります。静的変数と静的メソッドは、インスタンス オブジェクトではなく、クラス名を通じて参照する必要があります。

では、php と C# の static キーワードの違いは何でしょうか?

宣言範囲

C# と比較して、PHP での静的変数の使用範囲は広く、クラス、メソッド、または変数の前に static 修飾子を追加できるだけでなく、関数の内部変数に static キーワードを追加することもできます。 static 修飾子が追加された変数の値は、関数が実行された後でも失われません。つまり、次回この関数が呼び出されたときも、変数は元の値を保持します。例:

リーリー

実行結果は以下の通りです:

3 5 7

ここで注意すべき点は、変数の代入操作は変数が初めて初期化されるときにのみ呼び出され、それ以降の関数の実行中には呼び出されないことです。

PHP の関数も第一級市民であるため、C# とは異なり、関数を直接定義し、コード内の任意の場所で直接呼び出すことができます。これは JavaScript に似ています。したがって、現時点では、グローバル変数を定義するよりも関数静的変数の方が便利であり、変数の繰り返し定義によって引き起こされる競合を回避できます。 C# の関数は直接定義して呼び出すことができないため、クラスでホストする必要があります。そのため、関数に静的変数が必要な場合は、クラス内で定義するだけで同じ効果が得られます。

呼び出しメソッド

C# では、静的メンバーを呼び出す方法は非常にシンプルで一貫しています。静的メンバーはインスタンス オブジェクトに属さないため、メソッドであっても変数であっても、C# は常にクラス名.メソッド (変数) を通じて静的メンバーにアクセスします。 。また、C# では、静的関数を仮想メソッドとして設定したり、オーバーライドしたりすることはできません。 PHP はこれに対して、より柔軟で多様なサポートを提供します。

まず第一に、PHP のインスタンス メソッドは someobj->someFun() を通じて呼び出されることはわかっていますが、C# のように SomeClass->someFun() を通じて静的関数を呼び出すことはできますか?答えは「いいえ」です。PHP では、静的メンバーの呼び出しは SomeClass::someFun() などの :: を介してのみ実行できます。

リーリー

実行結果は以下の通りです:

3 1 5

C# と異なるもう 1 つの点は、クラス内のメソッドで静的変数を呼び出す必要がある場合、self::$somVar 静的変数を渡す必要があることです (変数、インスタンス変数の前の $ 記号に注意してください)は必須ではありません)、静的メソッドを呼び出します。メソッドは self::someFun() です (ここでは $ 記号は必要ありません)。上の例のように。

さらに、C# との最大の違いは、PHP では、サブクラスが親クラスの静的関数または変数をオーバーライドできることです (C# プログラマーの観点から見ると、PHP ではこれが複雑になると思います)。 , self::staticFun()はデフォルトでサブクラスのstatic関数を呼び出すので、この時に親クラスのstatic変数を呼び出したい場合はどうすればよいでしょうか?ここで、PHP は、基本クラスの静的メンバーを呼び出すための追加の親を提供します。例:

リーリー

実行結果は以下の通りです:

3 5 「こんにちは」

上記の例に基づいて、サブクラスはparentキーワードを使用して親クラスにアクセスできると簡単に考えることができます。では、親クラスはどのようにしてサブクラスの静的メソッドにアクセスするのでしょうか?ここでは、static の別の使用法を示します。呼び出された静的メソッドの前のスコープが static に変更されると、PHP はクラスの継承階層に基づいて最終的な静的メソッドを計算します。例:

リーリー

実行結果は以下の通りです:

テスト2 テスト2

ここで、t インスタンスが t1 メソッドから t2 静的メソッドを呼び出すと、そのインスタンスに基づいて最終的な静的メソッドが検索され、Test2 が出力されます。

まとめ

上記の分析から、静的メンバーの使用に関しては、PHP が C# よりも強力な機能や柔軟性を提供していることはわかりますが、私の観点からは、この柔軟性は、ある観点からは必ずしも優れているとは限りません。クラスの継承階層が複雑すぎると混乱するかもしれません。もちろん、同じツールでも人が違えば全く違う効果が得られます。PHP の方が選択肢が多いので、適切に使えば C# よりも PHP の static の方が強力で使いやすいのではないかと思います。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/752477.html技術記事 static キーワードは、C# プログラミングで非常に一般的で、特定のオブジェクトではなく型自体に属する静的メンバーの宣言を変更するために使用されます。 static 修飾子は、クラス、フィールド、メソッド、プロパティで使用できます...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!