静的変数の type キーワードは static です。この記事は主に、PHP で静的プロパティと静的メソッドを使用する方法と基本的な例、遅延バインディングについて学習するものです
静的 (静的) キーワードは静的メソッドとプロパティを定義するために使用され、静的は静的変数と静的変数を定義するためにも使用できます。 遅延静的バインディング セット。
1. 静的変数 静的変数
静的変数はローカル関数のスコープ内にのみ存在しますが、プログラムの実行がこのスコープを離れても、その値は失われません。つまり、次回この関数が実行されるときも、変数は元の値を覚えています。変数を静的として定義するには、変数の前に static キーワード を追加するだけです。
function testing() { static $a = 1; $a *= 2; echo $a."\n"; } testing(); testing(); testing(); testing(); /** * 2 * 4 * 8 * 16 * [Finished in 0.1s] */
静的変数は、再帰関数を処理する方法も提供します。再帰関数は、それ自体を呼び出す関数です。再帰関数を作成するときは、無限に再帰する可能性があるので注意してください。再帰を終了する適切な方法があることを確認する必要があります。
この例では、 testing() 関数は各実行後に $a 変数の値を内部的に保存します。次回 testing() が呼び出されるとき、$a の値が復元され、testing() はこの値を 2 で乗算して出力します。変数の初期デフォルト値は 1 で、この割り当ては変数が初めて初期化されるときにのみ行われます。この操作は、関数の実行ごとに呼び出されることはありません。
2. クラスでの静的要素の使用
クラスでの static キーワードの主な用途は 2 つあり、1 つは静的メンバーの定義に使用され、もう 1 つは静的メソッドの定義に使用されます。クラスのプロパティまたはメソッドを static として宣言すると、クラスをインスタンス化せずに直接アクセスできるようになります。インスタンス化されたクラスのオブジェクトを介して静的プロパティにアクセスすることはできません (ただし、静的メソッドはアクセスできます)。静的プロパティには、演算子を介してオブジェクトからアクセスできません。クラス内では、スコープ修飾演算子を使用して、スコープのさまざまなレベルの変数にアクセスできます。
2.1、静的プロパティ
静的メソッドはオブジェクトを通じて呼び出す必要がないため、疑似変数 $this は静的メソッドでは使用できません。静的変数は、クラスのインスタンスではなく、クラス全体に属すると考えることができます。一般的なインスタンス変数とは異なり、静的プロパティは 1 つの変数値のみを保持し、この変数値はすべてのインスタンスに対して有効です。つまり、すべてのインスタンスがこのプロパティを共有します。
class MyObject { public static $a = 0; function MyMethod() { self::$a += 2; echo self::$a . "\n"; } } $instance1 = new MyObject(); $instance1 -> MyMethod(); $instance2 = new MyObject(); $instance2 -> MyMethod(); /** * * 2 * 4 * [Finished in 0.1s] * */
$this ポインタはクラスの現在のインスタンスであり、呼び出し元のオブジェクトへの参照です。
self:: はクラス自体を表します。self:: スコープ 修飾子 を使用する場合、この演算子はクラス外のコードでは使用できず、クラス内の位置を識別することもできません。継承ツリー階層。拡張クラスで self:: スコープを使用する場合、self は基本クラスで宣言されたメソッドを呼び出すことができますが、常に拡張クラスでオーバーライドされたメソッドを呼び出します。
parent:: 拡張クラスで、基本クラスのメソッドがオーバーライドされるときに、基本クラスのメソッドにアクセスしたい場合は、parent::
static:: を使用できるため、self:: を使用する必要がなくなりました。および親:: 。機能を実装する最終クラスを指定する場合は、static を使用できます。この修飾子は、コードが実行される直前に継承階層の最後のクラスのメンバーを計算します。
2.3、静的メソッド
静的メソッドのルールは静的変数と同じです。 static キーワードを使用してメソッドを静的としてマークでき、クラス名とスコープ演算子 (::) を使用して静的メソッドにアクセスできます。
静的メソッドと非静的メソッドの間には重要な違いがあります。静的メソッドを呼び出すときに、クラスのインスタンスを所有する必要がなくなりました。
class MyObjectBase { static function MyMethod() { static::MyOtherMethod(); } static function MyOtherMethod() { echo 'called from MyObject.'; } } class MyExtendObject extends MyObjectBase { static function MyOtherMethod() { echo 'called from MyExtendObject.'; } } MyExtendObject::MyMethod();
上記のサンプル コードは、MyExtendObject の MyOtherMethod メソッドを正しく呼び出し、MyExtendObject から呼び出されて出力されます [0.1 秒で完了]。
メソッドに $this 変数が含まれていない場合、このメソッドは静的メソッドである必要があります。クラスのインスタンスが必要ない場合は、インスタンス化の必要がない静的クラスも使用する必要があります。さらに、静的メソッドは特定のインスタンスに属さないため、$this 変数を静的メソッドで使用することはできません。
2.4、遅延バインディング
static:: により、 self:: とparent:: を使用する必要がなくなります。機能を実装する最終クラスを指定する場合は、static を使用できます。この修飾子は、コードが実行される直前に継承階層の最後のクラスのメンバーを計算します。このプロセスは遅延バインディングと呼ばれます。
3. 概要
静的変数を作成し、デフォルトの初期化値を指定するには、static キーワードを使用します。静的変数は、関数が実行された後も値が変更されない変更された関数変数です。
static キーワードは、プロパティとメソッドを変更するためにクラス内で使用することもできます。プロパティで使用すると、プロパティは特定のインスタンスの値を保持しなくなりますが、代わりにクラス全体の値を保持し、静的プロパティをメンバー間で共有できます。
静的メソッドにアクセスするには、スコープ修飾子と呼ばれる (::) を使用できます。この演算子の左側には、クラス名または事前定義されたスコープを指定できます。事前定義されたスコープには、selfparent static が含まれます。演算子の右側は静的メソッドと静的プロパティです。
以上がPHPの静的変数のプロパティとメソッド、遅延バインディングの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。