ホームページ > バックエンド開発 > PHPチュートリアル > PHPクラスの静的メンバー変数と通常のメンバー変数の比較

PHPクラスの静的メンバー変数と通常のメンバー変数の比較

WBOY
リリース: 2016-06-13 12:20:45
オリジナル
1061 人が閲覧しました

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();
ログイン後にコピー
上記の実行結果は次のようになります: 5 aaaa aaaa

クラスのオブジェクト $a がクラスの静的メンバー変数の値を変更すると、クラスのすべてのインスタンス オブジェクトが静的メンバー変数を共有するため、他のオブジェクトが静的メンバー変数の値を取得すると変更されます。

$a = new A();echo $a->getB();$a->setB('aaaa');echo '<br/>';$b = new A();echo $b->getB();
ログイン後にコピー

上記の実行結果は次のとおりです。 4 4

echo A::getbb();
ログイン後にコピー

クラスの静的メソッドは静的メンバー変数にしかアクセスできないため、エラーが発生します

これを見れば皆さんも分かると思います!

間違いがあればご指摘ください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート