PHP クラスの静的メンバー変数と通常のメンバー変数の比較
よく分からない人も多いかもしれませんが、PHP のクラスの静的メンバー変数と通常のメンバー変数の違いは何でしょうか。
1. クラスの静的メソッドは静的メンバー変数にのみアクセスできますが、非静的メンバー変数にはアクセスできません
2. 静的メンバー変数はインスタンス化せずにアクセスでき、アクセス速度が速くなります
3. クラスの静的メンバー変数はこのクラスにのみ属しますが、クラスのすべてのインスタンスはこの静的メンバー変数
A を共有します。 c/c++ プログラムが占有するメモリは次の部分に分割されます:
(1)、スタック領域:
関数のパラメータ値を格納するためにコンパイラによって自動的に割り当ておよび解放されます。ローカル変数の値など。このスタックは、データ構造内のスタックと同様に動作します。スタック領域はプログラムの実行前に割り当てられ、ヒープ
(2) より高速です。 ヒープ領域:
は通常、プログラマが解放しない場合に割り当てられ、解放されます。 、、は、プログラムの終了時に OS によって再利用される場合があります。データ構造はヒープとは異なり、割り当て方法はリンク リストに似ていることに注意してください。プログラム実行時に動的に割り当てられるため、スタックよりも遅い
(3)、グローバル領域(静的):
グローバル変数と静的変数の格納場所がまとめられています。初期化されたグローバル変数とスタティック変数は 1 つの領域に配置され、初期化されていないグローバル変数とスタティック変数は隣接する別の領域に配置されます。プログラム終了後にシステムにより解放されます。
(4) リテラル定数領域:
定数文字列が配置されます。プログラム終了後にシステムにより解放されます。
(5)、プログラムコード領域:
関数本体のバイナリコードを格納します。
一緒に小さな例をやってみましょう:
class A{ public static $a = 5; public $b = 4; public function getA(){ return A::$a; } public function setA($val){ A::$a = $val; } public function getB(){ return $this->b; } public function setB($val){ $this->b = $val; } public static function getbb(){ return $this->a; }}
$a = new A();echo $a->getA();$a->setA('aaaa');echo '<br/>';$b = new A();echo $b->getA();echo '<br/>';$c = new A();echo $c->getA();
クラスのオブジェクト $a がクラスの静的メンバー変数の値を変更すると、クラスのすべてのインスタンス オブジェクトが静的メンバー変数を共有するため、他のオブジェクトが静的メンバー変数の値を取得すると変更されます。
$a = new A();echo $a->getB();$a->setB('aaaa');echo '<br/>';$b = new A();echo $b->getB();
echo A::getbb();
これを見れば皆さんも分かると思います!
間違いがあればご指摘ください。