PHP上級プログラミング学習ノート2014.06.10
この記事では、変数、クラス、メソッドで使用できる static キーワードについて説明します。
1. 静的変数
静的変数は関数のスコープ内にのみ存在する変数ですが、関数の実行が完了した後も、この変数の値は失われません。つまり、変数は次回の実行時にも元の値を保持します。関数が実行されます。 変数を静的として定義するには、変数の前に static キーワードを追加するだけです。
リーリーこの例では、 testing() 関数は各実行後に $a 変数の値を内部的に保存します。次回 testing() が呼び出されるとき、$a の値が復元され、testing() はこの値を 2 で乗算して出力します。変数の初期デフォルト値は 1 であるため、この割り当ては変数が初めて初期化されるときにのみ行われます。この操作は、関数の実行ごとに呼び出されることはありません。
2. クラスでの静的要素の使用
static キーワードには、クラス内で主に 2 つの用途があります。1 つは静的メンバーを定義すること、もう 1 つは静的メソッドを定義することです。クラス内では、スコープ修飾演算子を使用して、スコープのさまざまなレベルの変数にアクセスできます。
2.1、静的属性
静的プロパティはクラス変数であり、クラスのインスタンスではなくクラス全体に属するとみなすことができます。一般的なインスタンス変数とは異なり、静的プロパティは 1 つの変数値のみを保持し、この変数値はすべてのインスタンスに対して有効です。つまり、すべてのインスタンスがこのプロパティを共有します。
リーリー$this インジケーターは、クラスの現在のインスタンスです。
self:: はクラス自体を表します。self:: スコープ修飾子を使用する場合は、演算子の後に $ 記号を追加する必要があります。この演算子はクラス外のコードでは使用できず、クラス内の Position を継承していることを認識できません。ツリー階層。拡張クラスで self:: スコープを使用する場合、self は基本クラスで宣言されたメソッドを呼び出すことができますが、常に拡張クラスでオーバーライドされたメソッドを呼び出します。
parent:: 拡張クラスで、基本クラスのメソッドがオーバーライドされるときに、基本クラスのメソッドにアクセスしたい場合は、parent::
を使用できます。static:: を使用すると、 self:: とparent:: を使用する必要がなくなります。機能を実装する最終クラスを指定する場合は、static を使用できます。この修飾子は、コードが実行される直前に継承階層の最後のクラスのメンバーを計算します。
2.3、静的メソッド
静的メソッドのルールは静的変数と同じです。 static キーワードを使用してメソッドを静的としてマークでき、クラス名とスコープ演算子 (::) を使用して静的メソッドにアクセスできます。
静的メソッドと非静的メソッドの間には重要な違いがあります。静的メソッドを呼び出すときに、クラスのインスタンスを所有する必要がなくなりました。
リーリー上記のコード例は、MyExtendObject の MyOtherMethod メソッドを正しく呼び出し、MyExtendObject から呼び出された出力を実行します [0.1 秒で完了]。
静的メソッドをいつ使用する必要があり、いつ非静的メソッドを使用する必要があるかを明確に知ることは非常に困難です。原則の 1 つは、メソッドに $this 変数が含まれていない場合、このメソッドは静的メソッドである必要があるということです。クラスのインスタンスが必要ない場合は、インスタンス化の必要がない静的クラスも使用する必要があります。さらに、静的メソッドは特定のインスタンスに属さないため、$this 変数を静的メソッドで使用することはできません。
2.4、遅延バインディング
static:: を使用すると、 self:: とparent:: を使用する必要がなくなります。機能を実装する最終クラスを指定する場合は、static を使用できます。この修飾子は、コードが実行される直前に継承階層の最後のクラスのメンバーを計算します。このプロセスは遅延バインディングと呼ばれます。
3. 概要
静的変数は、関数の実行後に変更された関数変数です。 static キーワードを使用して静的変数を作成し、デフォルトの初期化値を指定します。
static キーワードは、クラス内でプロパティやメソッドを変更するために使用することもできます。プロパティで使用すると、プロパティは特定のインスタンスの値を保持しなくなりますが、代わりにクラス全体の値を保持し、静的プロパティをメンバー間で共有できます。
静的メソッドにアクセスするには、スコープ修飾子と呼ばれる (::) を使用できます。この演算子の左側には、クラス名または事前定義されたスコープを指定できます。事前定義されたスコープには、selfparent static が含まれます。演算子の右側は静的メソッドと静的プロパティです。