ホームページ  >  記事  >  バックエンド開発  >  PHP: 静的静的変数と通常の変数の違いの分析

PHP: 静的静的変数と通常の変数の違いの分析

黄舟
黄舟オリジナル
2017-07-02 12:00:171975ブラウズ

1. 変数の前に static を追加して、static 変数 (静的変数) を形成します。
2. 静的変数と通常の変数の違いは、非静的グローバル変数のスコープがソースプログラム全体であることです。ソースプログラムが複数のソースファイルで構成されている場合、非静的グローバル変数は各ソースファイルで有効です。 。 の。 静的グローバル変数はスコープを制限します。つまり、変数が定義されているソース ファイル内でのみ有効であり、同じソース プログラム内の他のソース ファイルでは使用できません。静的グローバル変数のスコープは 1 つのソース ファイルに限定され、そのソース ファイル内の関数でのみ共有できるため、他のソース ファイルでのエラーを回避できます。 3. 静的変数と通常の変数の違い: 静的​​グローバル変数と通常のグローバル変数の違い: 静的​​グローバル変数は、
他のファイル単位で参照されることを防ぐために一度だけ初期化されます
。変数と通常のローカル変数: 静的ローカル変数は 1 回だけ初期化され、次回は前の結果値に基づいて行われます。 静的関数と通常の関数の違い: 静的​​関数はメモリ内にコピーを 1 つだけ保持し、通常の関数は 1 つのコピーを保持します。通話ごとにコピーします。 4. グローバル変数の前にキーワード static を追加すると、グローバル変数はグローバル静的変数として定義されます。
1) メモリ内の場所: 静的記憶領域 (プログラム実行中に静的記憶領域が存在します)
2) 初期化: 初期化されていないグローバル静的変数は、プログラムによって自動的に 0 に初期化されます (自動オブジェクトの値は、そうでない限り任意です)明示的に初期化されます)
3) スコープ: グローバル静的変数は、宣言されているファイルの外部には表示されません。定義の時点からファイルの終わりまで。
5. 静的変数の利点:
は他のファイルからアクセスされず、競合することなく他のファイル内の
変数を変更できます。
メモリ内の場所: 静的記憶領域
初期化: 初期化されていないグローバル静的変数は、プログラムによって自動的に 0 に初期化されます (自動オブジェクトの値は、明示的に初期化されない限り任意です)
スコープ: スコープはローカルのままです スコープは次の時点で終了しますそれを定義する関数またはステートメント ブロックが終了します。

注: static を使用してローカル変数を変更すると、ローカル変数の格納場所が元のスタックから静的ストレージ領域に変更されます。ただし、ローカル静的変数はスコープを出た後も破棄されず、プログラムの終了までメモリ内に残りますが、アクセスできなくなります。
static を使用してグローバル変数を変更すると、グローバル変数のスコープが変更されます (グローバル変数が宣言されているファイルの外部には表示されません) が、静的ストレージ領域内にあるそのストレージの場所は変更されません。 。

静的とは、静的オブジェクトまたは静的変数を定義することです。この記事の関連する例を読んだ後、静的で定義された変数またはクラスメソッドの特徴がわかります。
1.

オブジェクトを作成

$object = new Class()し、変数/メソッドがアクセス可能な場合は、「->」を使用して$object->属性/関数を呼び出します。
2. 静的か非静的かを問わず、クラスのメソッド/変数: class::attribute/function を直接呼び出します。ただし、前提条件があります: A. 変数の場合、その変数はアクセス可能である必要があります。 B. メソッドの場合、メソッドがアクセス可能であることに加えて、次の条件も満たす必要があります。
b1) 静的メソッドの場合、特別な条件はありません。
b2) 非静的メソッドの場合。 、メソッド内で $this が使用されていない、つまり非静的変数/メソッドの呼び出しがないように変更する必要があります。もちろん、静的変数/メソッドの呼び出しには問題ありません。
それでは、$object->gt;…を使用する場合とclass::…を使用する場合の違いを見てみましょう:
1. $object->gt;…を使用する場合は、
コンストラクター
を実行してオブジェクトを作成する必要があります。 2. class::... を使用して静的メソッド/変数を呼び出すと、オブジェクトを作成するためにコンストラクターを実行する必要はありません
3. class::... を使用して非静的メソッド/変数を呼び出すと、オブジェクトを作成するためにコンストラクターを実行する必要はありません。 すると不思議なことが出てきますが、2と3は同じなので静的メソッド/変数の存在意義は何でしょうか? 静的 static
クラスのメンバーやメソッドをstaticとして宣言すると、クラスをインスタンス化せずに直接アクセスできます(静的メソッドを除く)オブジェクトを介して静的メンバーにアクセスすることはできません。静的メンバーはクラスに属し、どのオブジェクト インスタンスにも属しませんが、クラスのオブジェクト インスタンスは共有できます。

以上がPHP: 静的静的変数と通常の変数の違いの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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