ホームページ  >  記事  >  バックエンド開発  >  PHPオブジェクト指向プログラミング(oop)学習記(2) - 静的変数のプロパティとメソッドと遅延バインディング_PHPチュートリアル

PHPオブジェクト指向プログラミング(oop)学習記(2) - 静的変数のプロパティとメソッドと遅延バインディング_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:28:20774ブラウズ

static (static) キーワードは、静的メソッドとプロパティを定義するために使用されます。また、静的変数と遅延静的バインディングを定義するためにも使用できます。

1、静的変数静的変数

静的変数はローカル関数スコープ内にのみ存在しますが、プログラムの実行がこのスコープを離れても、その値は失われません。つまり、次回この関数が実行されるときも、変数は元の値を覚えています。変数を静的として定義するには、変数の前に static キーワードを追加するだけです。

コードをコピーする コードは次のとおりです:

function testing()
{
static $a = 1;
$a *= 2;
echo $a."n";
}
testing ();
テスト();
テスト();
テスト();
/**
* 2
* 4
* 8
* 16
* [0.1秒で終了]
*/

静的変数は、再帰関数を処理する方法も提供します。再帰関数は、それ自体を呼び出す関数です。再帰関数を作成するときは、無限に再帰する可能性があるので注意してください。再帰を終了する適切な方法があることを確認する必要があります。

この例では、 testing() 関数は各実行後に $a 変数の値を内部的に保存します。次回 testing() が呼び出されるとき、$a の値が復元され、testing() はこの値を 2 で乗算して出力します。変数の初期デフォルト値は 1 で、この割り当ては変数が初めて初期化されるときにのみ行われます。この操作は、関数の実行ごとに呼び出されることはありません。

2. クラスでの静的要素の使用

static キーワードには、クラス内で主に 2 つの用途があります。1 つは静的メンバーを定義すること、もう 1 つは静的メソッドを定義することです。クラスのプロパティまたはメソッドを static として宣言すると、クラスをインスタンス化せずに直接アクセスできるようになります。インスタンス化されたクラスのオブジェクトを介して静的プロパティにアクセスすることはできません (ただし、静的メソッドはアクセスできます)。 -> 演算子を使用してオブジェクトから静的プロパティにアクセスすることはできません。クラス内では、スコープ修飾演算子を使用して、スコープのさまざまなレベルの変数にアクセスできます。

2.1、静的プロパティ

静的メソッドではオブジェクトを呼び出す必要がないため、疑似変数 $this は静的メソッドでは使用できません。静的変数は、クラスのインスタンスではなく、クラス全体に属すると考えることができます。一般的なインスタンス変数とは異なり、静的プロパティは 1 つの変数値のみを保持し、この変数値はすべてのインスタンスに対して有効です。つまり、すべてのインスタンスがこのプロパティを共有します。

:$a . "n";

}

}$instance1 = new MyObject();$instance1 -> MyMethod();$instance2 = new MyObject();$instance2 -> ();
/* *
*
* 2
* 4
* [0.1秒で完了]
*
 */



$this インジケーターはクラスの現在のインスタンスであり、呼び出し元のオブジェクトへの参照です。

self:: はクラス自体を表します。self:: スコープ修飾子を使用する場合、この演算子はクラス外のコードでは使用できず、継承ツリーの位置でそれ自体を識別することはできません。階層内で。拡張クラスで self:: スコープを使用する場合、self は基本クラスで宣言されたメソッドを呼び出すことができますが、常に拡張クラスでオーバーライドされたメソッドを呼び出します。

parent:: 拡張クラスで、基本クラスのメソッドがオーバーライドされるときに、基本クラスのメソッドにアクセスしたい場合は、parent::
を使用できます。
static:: を使用すると、 self:: とparent:: を使用する必要がなくなります。機能を実装する最終クラスを指定する場合は、static を使用できます。この修飾子は、コードが実行される直前に継承階層の最後のクラスのメンバーを計算します。

2.3、
静的メソッド


静的メソッドのルールは静的変数と同じです。 static キーワードを使用してメソッドを静的としてマークでき、クラス名とスコープ演算子 (::) を使用して静的メソッドにアクセスできます。
静的メソッドと非静的メソッドの間には重要な違いがあります。静的メソッドを呼び出すとき、クラスのインスタンスを所有する必要がなくなりました。

コードをコピーします

コードは次のとおりです:


class MyObjectBase
{
static function MyMethod()
{
static::MyOtherMethod();
}
static function MyOtherMethod()
{
echo 'MyObjectから呼び出されます。';
}
}
class MyExtendObject extends MyObjectBase
{
static function MyOtherMethod()
{
echo 'MyExtendObject から呼び出されます。';
}
}
MyExtendObject::MyMethod();

上記のコード例は、MyExtendObject の MyOtherMethod メソッドを正しく呼び出し、MyExtendObject から呼び出された出力を実行します [0.1 秒で完了]。

メソッドに $this 変数が含まれていない場合、このメソッドは静的メソッドである必要があります。クラスのインスタンスが必要ない場合は、インスタンス化の必要がない静的クラスも使用する必要があります。さらに、静的メソッドは特定のインスタンスに属さないため、$this 変数を静的メソッドで使用することはできません。

2.4、遅延バインディング

static:: を使用すると、 self:: とparent:: を使用する必要がなくなります。機能を実装する最終クラスを指定する場合は、static を使用できます。この修飾子は、コードが実行される直前に継承階層の最後のクラスのメンバーを計算します。このプロセスは遅延バインディングと呼ばれます。

3、概要

静的変数を作成し、デフォルトの初期化値を指定するには、static キーワードを使用します。静的変数は、関数が実行された後も値が変更されない変更された関数変数です。

static キーワードは、クラス内でプロパティやメソッドを変更するために使用することもできます。プロパティで使用すると、プロパティは特定のインスタンスの値を保持しなくなりますが、代わりにクラス全体の値を保持し、静的プロパティをメンバー間で共有できます。

静的メソッドにアクセスするには、スコープ修飾子と呼ばれる (::) を使用できます。この演算子の左側には、クラス名または事前定義されたスコープを指定できます。事前定義されたスコープには、selfparent static が含まれます。演算子の右側は静的メソッドと静的プロパティです。

www.bkjia.com本当http://www.bkjia.com/PHPjc/788636.html技術記事 Static キーワードは、静的メソッドとプロパティを定義するために使用され、静的変数および遅延静的バインディングを定義するためにも使用できます。 1. 静的変数 静的変数 静的変数はローカルにのみ存在します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。