ホームページ  >  記事  >  バックエンド開発  >  PHP 変数スコープの学習ノートの共有_PHP チュートリアル

PHP 変数スコープの学習ノートの共有_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:50:25901ブラウズ

変数スコープとは、変数がページと関数間で相互に使用できるかどうかを指します。その動作範囲は何ですか?PHP 変数の使用範囲についての勉強メモをいくつか紹介します。

PHPの変数のスコープはPHPマニュアルに記載されています

ユーザー定義関数では、ローカル関数スコープが導入されます。関数内で使用される変数は、デフォルトではローカル関数のスコープに制限されます。例:

コードは次のとおりです コードをコピー

$a = 1; /* グローバルスコープ */

関数テスト()
{
echo $a; /* ローカルスコープ変数への参照 */
}

テスト();
?>

echo ステートメントは変数 $a のローカル バージョンを参照しており、このスコープ内の値が割り当てられていないため、このスクリプトからの出力はありません。 PHP のグローバル変数は C 言語とは少し異なることに気づくかもしれませんが、C 言語では、ローカル変数によってオーバーライドされない限り、グローバル変数は関数内で自動的に有効になります。

PHP の変数には主に、組み込みスーパーグローバル変数、一般変数、定数、グローバル変数、静的変数などが含まれます

■組み込みスーパーグローバル変数は、スクリプト内のどこでも使用および表示できます。つまり、PHP ページ内の値の 1 つを変更すると、他の PHP ページで使用されたときにその値も変更されます。

■一度宣言した定数はグローバルに参照可能、つまり関数内外で使用可能ですが、これは1つのページ(includeやinclude_onceでインクルードしたPHPスクリプトも含む)に限定されており、他のページでは使用できなくなります。 。
■スクリプト内で宣言されたグローバル変数はスクリプト全体で参照できますが、関数内では参照できません。関数内の変数がグローバル変数と同じ名前の場合、関数内の変数が優先されます。
■関数内で使用される変数がグローバル変数として宣言されている場合、その名前はグローバル変数の名前と一致している必要があります。この場合、関数内で関数の外にあるグローバル変数を使用することで、前の問題を回避できます。問題は、関数内の変数が外部グローバル変数と同じ名前を持ち、外部変数をオーバーライドします。
■関数内で作成され、static として宣言された変数は、関数の外部からは見ることができませんが、関数の複数回の実行中に値を維持できます。最も一般的な状況は、関数の再帰実行中です。
■関数内で作成された変数は関数に対してローカルであり、関数が終了すると存在しなくなります。
スーパーグローバル変数の完全なリストは次のとおりです:

■.$GOBALS すべてのグローバル変数の配列

■.$_SERVERサーバー環境変数配列
■.$_POST POSTメソッド経由でこのスクリプトに渡される変数の配列
■.$_GET GETメソッド経由でこのスクリプトに渡される変数の配列
■.$_COOKIE クッキー変数配列
■.$_FILES ファイルアップロードに関する変数の配列
■.$ENV 環境変数配列
■.$_REQUEST すべてのユーザー入力変数配列には、$_GET $_POST $_COOKIE に含まれる入力内容が含まれます
■.$_SESSIONセッション変数配列

1. ローカル変数

関数内で宣言された変数はローカル変数とみなされます。つまり、その関数内でのみ参照できます。関数の外にコピーされた場合、それは完全に異なる変数 (つまり、関数に含まれる変数とは異なる) とみなされます。変数が宣言された関数を終了すると、変数とその対応する値が破棄されることに注意してください。

コードは次のとおりですコードをコピー

2. 関数パラメータ

PHP は、他のプログラミング言語と同様に、パラメーターを受け入れる関数は関数ヘッダーでこれらのパラメーターを宣言する必要があります。これらのパラメータ(値パラメータ)は関数の外部から値を受け入れますが、関数を終了するとアクセスできなくなります。

$x=4;

関数 assignx(){

$x=0;

printf("関数内の $x は %d
",$x);

}

assignx();

printf("関数外の $x は %d
",$x);

実行結果は

関数内の$は0です

機能外の$は4

コードは次のとおりです コードをコピー

関数 x10($value){
$値=

$値=$値*10

$value を返す;

}

これらの関数パラメータは、宣言されている関数内でアクセスして操作できますが、関数の実行が終了するとパラメータは破棄されることに注意してください。

3. グローバル変数

グローバル変数はプログラム内のどこからでもアクセスできます。ただし、グローバル変数を変更するには、変数を変更する関数内でグローバル変数として明示的に宣言する必要があります。キーワード GLOBAL が変数の前に追加されている限り、それはグローバル変数です。既存の変数の前に GLOBA キーワードを置くと、PHP に同じ名前の変数を使用するように指示されます。


グローバルの代わりに $GLOBALS を使用してください

コードは次のとおりです コードをコピー

$a = 1;
$b = 2;
関数 Sum()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
合計();
エコー $b;
?>


$GLOBALS 配列では、各変数は要素であり、キー名は変数名に対応し、値変数の内容は対応します。 $GLOBALS はスーパーグローバル変数であるため、$GLOBALS はグローバル スコープ内に存在します。次の例は、スーパーグローバル変数の使用を示しています:
例 12-3. スーパーグローバル変数とスコープを示す例

コードは次のとおりです コードをコピー

関数test_global()
{
// ほとんどの事前定義変数は「スーパー」ではなく、関数のローカル スコープで使用できるようにするには「global」キーワードが必要です。
グローバル $HTTP_POST_VARS;
$HTTP_POST_VARS['name'] を印刷します
// スーパーグローバルはどのスコープでも有効であり、「グローバル」宣言は必要ありません。スーパーグローバルは PHP 4.1.0 で導入されました。
$_POST['name'] を印刷します
}
?>


静的変数を使用する

変数スコープのもう 1 つの重要な機能は、静的変数です。静的変数はローカル関数スコープ内にのみ存在しますが、プログラムの実行がこのスコープを離れても、その値は失われません。以下の例を見てください:
例 12-4. 静的変数の必要性を示します

コードは次のとおりです コードをコピー

functionTest()
{
$a = 0;
エコー $a;
$a++;
}
?>


この関数は、$a の値を 0 に設定し、呼び出されるたびに「0」を出力するため、あまり役に立ちません。関数が終了すると変数 $a は存在しないため、変数を 1 つインクリメントする $a++ は効果がありません。このカウント値を失わないカウント関数を作成するには、変数 $a を静的として定義します:
例 12-5. 静的変数の使用例

関数 Test()
{
静的 $a = 0;
エコー $a;
$a++;
}
?>


これで、Test() 関数を呼び出すたびに $a の値が出力され、1 ずつ増加します。
静的変数は、再帰関数を処理する方法も提供します。再帰関数は、それ自体を呼び出す関数です。再帰関数を作成するときは、無限に再帰する可能性があるので注意してください。再帰を終了する適切な方法があることを確認する必要があります。静的変数 $count を使用して、いつ停止するかを決定し、再帰的に 10 までカウントするこの単純な関数を考えてみましょう:
例 12-6. 静的変数と再帰関数

コードは次のとおりです コードをコピー

関数 Test()
{
静的 $count = 0;
$count++;
エコー $count;
if ($count テスト ();
}
$count--;
}
?>


注: 静的変数は、上の例のように宣言できます。これを宣言内の式の結果に代入すると、解析エラーが発生します。
例 12-7. 静的変数の宣言

コードは次のとおりです コードをコピー

関数 foo(){
static $int = 0 // 正しい
; static $int = 1+2 // (式なので) 間違っています
static $int = sqrt(121); // (式でもあるので) 間違っています
$int++;
エコー $int;
}
?>

友人からグローバル静的変数について質問されたことに注意してください。phpにはグローバル変数などというものはありません

php はインタープリター言語ですが、static 修飾子が付いていますが、その意味は .Net とはまったく異なります。
クラス内の変数が静的として宣言されている場合でも、この変数は現在のページレベルのアプリケーション ドメインでのみ有効です。

2. 変数のスコープを理解する。

メソッド外で宣言された変数にはメソッド本体内ではアクセスできません。
例:

コードは次のとおりです コードをコピー

$url = "www.bKjia.c0m"; 関数 _DisplayUrl()
{
$url をエコーし​​ます。 }
関数 DisplayUrl()
{
グローバル $url
$url をエコーし​​ます。 }
_DisplayUrl(); ディスプレイURL(); ?>

$url = "www.bKjia.c0m";
関数_DisplayUrl()
{

$url をエコー;

}
関数 DisplayUrl()
{
グローバル $url;
$url をエコー;
}
_DisplayUrl();
DisplayUrl();
?>



_DisplayUrl メソッドは、変数 $url がメソッド本体 _DisplayUrl でアクセスできないため、結果を表示しません。DisplayUrl メソッドなど、$url の前に global を追加するだけです。

メソッド本体で定義されたグローバル変数は、メソッドの外部からアクセスできます:

コードは次のとおりです コードをコピー


関数 _DisplayUrl()
{
グローバル $myName
$myName='yibin'; }

_DisplayUrl(); echo $myName // イービンを出力します
?>

http://www.bkjia.com/PHPjc/632648.html

tru​​ehttp://www.bkjia.com/PHPjc/632648.html技術記事変数のスコープとは、ページと関数の間で変数を相互に使用できるかどうかを指します。そのスコープとは何ですか?PHP の変数の使用スコープに関する勉強メモをいくつか紹介します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。