ホームページ  >  記事  >  バックエンド開発  >  PHPの静的メンバー変数と静的変数の初期化について詳しく解説

PHPの静的メンバー変数と静的変数の初期化について詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-06-30 11:33:112166ブラウズ

staticメンバー: 静的クラスのメンバーは、静的メンバーであるstatic修飾子を使用して追加されます。静的であるため、この静的メンバーにアクセスするには、クラス名と静的メンバー名を直接使用できます。メモリ内に存在し、静的メンバーではないメンバーは、メモリが割り当てられる前にインスタンス化する必要があるため、静的メンバーは非静的メンバーにアクセスできません。静的メンバーはメモリ内に存在するため、非静的メンバーはクラス内の静的メンバーに直接アクセスできます。 1. 静的グローバル変数

定義: グローバル変数の前にキーワード static を追加すると、変数は静的グローバル変数として定義されます。

特徴:

A. この変数はグローバルデータ領域にメモリを割り当てます。 B. 初期化: 明示的に初期化されていない場合、暗黙的に 0 に初期化されます (明示的に初期化されない限り、自動変数はランダムです)。

C. Access 変数はソース ファイル内でのみ表示され、定義の時点からこのファイル内で終了する必要があります。

2. 静的ローカル変数

特徴:

A. この変数はグローバルデータ領域にメモリを割り当てます。 B. 初期化: 明示的に初期化されない場合、暗黙的に 0 に初期化され、その後の

function

呼び出しは初期化されなくなります。

C. プログラムの終了まで常にグローバルデータ領域に存在します。ただし、そのスコープはローカル スコープであり、それを定義する関数またはステートメント ブロックが終了すると、そのスコープも終了します。 静的データ メンバーは、通常のデータ メンバーと同じパブリック、保護、およびプライベートのアクセス ルールに従います。

静的データ メンバーはグローバル データ領域にメモリを割り当て、このクラスのすべての

オブジェクト

によって共有されるため、特定のクラス Object に属しており、そのスコープはクラス オブジェクトが生成されていないときに表示されます。つまり、クラスのインスタンスが生成されていないときに操作できます。静的データ メンバーの初期化は、一般的なデータ メンバーの初期化とは異なります。静的データ メンバーの初期化の形式は次のとおりです:

データ型

>::= クラスの静的データ メンバーには 2 つのアクセス形式があります。

<クラスオブジェクト名>.<静的データメンバ名>or<クラス型名>::<静的データメンバ名>

静的データメンバのアクセス権限が許可されている場合(つまりpublic) member) を使用して、プログラム内で上記の形式を使用して 静的データ メンバーを参照できます。

静的データ メンバーは、主に各オブジェクトが同じ

属性 を持つ場合に使用されます。たとえば、預金クラスの場合、各インスタンスの金利は同じです。したがって、金利は預金クラスの静的データ メンバーとして設定する必要があります。これには 2 つの利点があります。まず、定義されているデポジット クラス オブジェクトの数に関係なく、すべてのインタレスト データ メンバーがグローバル データ領域に割り当てられたメモリを共有するため、ストレージ領域が節約されます。次に、利息を変更する必要がある場合、一度変更する限り、すべての預金オブジェクトの利息が変更されます

静的変数の初期化

例:

class A { 
public $f1 = 'xxxx'; 
static public $f2 = 100; 
}

変数を割り当てたい場合。オブジェクトに追加する場合は、コンストラクターでのみ初期化できます。例:

class A { 
private $child; 
public function construct() { 
$this->child = new B(); 
} 
}

しかし、php には Java の静的コンストラクター/静的ブロックに似たものがないため、初期化する適切なタイミングがありません。

共有メンバーの問題を解決するには、次のような方法があります。


class A { 
static public $child; 
} 
A::$child = new B();

プライベート メンバーに対する明確な方法はないようです。これを行うしかありません:


class A { 
static private $child; 
static public initialize() { 
self::$child = new B(); 
} 
} 
A::initialize();

以上がPHPの静的メンバー変数と静的変数の初期化について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。