変数スコープとは、変数がページと関数間で相互に使用できるかどうかを指します。その動作範囲は何ですか?PHP 変数の使用範囲についての勉強メモをいくつか紹介します。
PHPの変数のスコープはPHPマニュアルに記載されています
ユーザー定義関数では、ローカル関数スコープが導入されます。関数内で使用される変数は、デフォルトではローカル関数のスコープに制限されます。例:
コードは次のとおりです | コードをコピー |
$a = 1; /* グローバルスコープ */ 関数テスト() テスト(); |
echo ステートメントは変数 $a のローカル バージョンを参照しており、このスコープ内の値が割り当てられていないため、このスクリプトからの出力はありません。 PHP のグローバル変数は C 言語とは少し異なることに気づくかもしれませんが、C 言語では、ローカル変数によってオーバーライドされない限り、グローバル変数は関数内で自動的に有効になります。
PHP の変数には主に、組み込みスーパーグローバル変数、一般変数、定数、グローバル変数、静的変数などが含まれます
■一度宣言した定数はグローバルに参照可能、つまり関数内外で使用可能ですが、これは1つのページ(includeやinclude_onceでインクルードしたPHPスクリプトも含む)に限定されており、他のページでは使用できなくなります。 。
■スクリプト内で宣言されたグローバル変数はスクリプト全体で参照できますが、関数内では参照できません。関数内の変数がグローバル変数と同じ名前の場合、関数内の変数が優先されます。
■関数内で使用される変数がグローバル変数として宣言されている場合、その名前はグローバル変数の名前と一致している必要があります。この場合、関数内で関数の外にあるグローバル変数を使用することで、前の問題を回避できます。問題は、関数内の変数が外部グローバル変数と同じ名前を持ち、外部変数をオーバーライドします。
■関数内で作成され、static として宣言された変数は、関数の外部からは見ることができませんが、関数の複数回の実行中に値を維持できます。最も一般的な状況は、関数の再帰実行中です。
■関数内で作成された変数は関数に対してローカルであり、関数が終了すると存在しなくなります。
スーパーグローバル変数の完全なリストは次のとおりです:
■.$_SERVERサーバー環境変数配列
■.$_POST POSTメソッド経由でこのスクリプトに渡される変数の配列
■.$_GET GETメソッド経由でこのスクリプトに渡される変数の配列
■.$_COOKIE クッキー変数配列
■.$_FILES ファイルアップロードに関する変数の配列
■.$ENV 環境変数配列
■.$_REQUEST すべてのユーザー入力変数配列には、$_GET $_POST $_COOKIE に含まれる入力内容が含まれます
■.$_SESSIONセッション変数配列
1. ローカル変数
コードをコピー | |||||
$x=4; 関数 assignx(){ $x=0; printf("関数内の $x は %d ",$x); } assignx(); printf("関数外の $x は %d ",$x);
実行結果は 機能外の$は4
|
コードは次のとおりです | コードをコピー |
関数 x10($value){ $値=$値*10 $value を返す; } |
これらの関数パラメータは、宣言されている関数内でアクセスして操作できますが、関数の実行が終了するとパラメータは破棄されることに注意してください。
3. グローバル変数
グローバル変数はプログラム内のどこからでもアクセスできます。ただし、グローバル変数を変更するには、変数を変更する関数内でグローバル変数として明示的に宣言する必要があります。キーワード GLOBAL が変数の前に追加されている限り、それはグローバル変数です。既存の変数の前に GLOBA キーワードを置くと、PHP に同じ名前の変数を使用するように指示されます。
グローバルの代わりに $GLOBALS を使用してください
コードは次のとおりです | コードをコピー |
$a = 1; |
$GLOBALS 配列では、各変数は要素であり、キー名は変数名に対応し、値変数の内容は対応します。 $GLOBALS はスーパーグローバル変数であるため、$GLOBALS はグローバル スコープ内に存在します。次の例は、スーパーグローバル変数の使用を示しています:
例 12-3. スーパーグローバル変数とスコープを示す例
コードは次のとおりです | コードをコピー |
関数test_global() |
静的変数を使用する
変数スコープのもう 1 つの重要な機能は、静的変数です。静的変数はローカル関数スコープ内にのみ存在しますが、プログラムの実行がこのスコープを離れても、その値は失われません。以下の例を見てください:
例 12-4. 静的変数の必要性を示します
コードは次のとおりです | コードをコピー |
functionTest() |
この関数は、$a の値を 0 に設定し、呼び出されるたびに「0」を出力するため、あまり役に立ちません。関数が終了すると変数 $a は存在しないため、変数を 1 つインクリメントする $a++ は効果がありません。このカウント値を失わないカウント関数を作成するには、変数 $a を静的として定義します:
例 12-5. 静的変数の使用例
関数 Test()
{
静的 $a = 0;
エコー $a;
$a++;
}
?>
これで、Test() 関数を呼び出すたびに $a の値が出力され、1 ずつ増加します。
静的変数は、再帰関数を処理する方法も提供します。再帰関数は、それ自体を呼び出す関数です。再帰関数を作成するときは、無限に再帰する可能性があるので注意してください。再帰を終了する適切な方法があることを確認する必要があります。静的変数 $count を使用して、いつ停止するかを決定し、再帰的に 10 までカウントするこの単純な関数を考えてみましょう:
例 12-6. 静的変数と再帰関数
コードは次のとおりです | コードをコピー |
関数 Test() |
注: 静的変数は、上の例のように宣言できます。これを宣言内の式の結果に代入すると、解析エラーが発生します。
例 12-7. 静的変数の宣言
コードは次のとおりです | コードをコピー |
関数 foo(){ |
友人からグローバル静的変数について質問されたことに注意してください。phpにはグローバル変数などというものはありません
php はインタープリター言語ですが、static 修飾子が付いていますが、その意味は .Net とはまったく異なります。
クラス内の変数が静的として宣言されている場合でも、この変数は現在のページレベルのアプリケーション ドメインでのみ有効です。
2. 変数のスコープを理解する。
メソッド外で宣言された変数にはメソッド本体内ではアクセスできません。
例:
コードは次のとおりです | コードをコピー | ||||
$url = "www.bKjia.c0m";
関数 _DisplayUrl()
} _DisplayUrl メソッドは、変数 $url がメソッド本体 _DisplayUrl でアクセスできないため、結果を表示しません。DisplayUrl メソッドなど、$url の前に global を追加するだけです。 メソッド本体で定義されたグローバル変数は、メソッドの外部からアクセスできます:
|
http://www.bkjia.com/PHPjc/632648.html