ホームページ >バックエンド開発 >PHPチュートリアル >PHP変数スコープの詳しい説明

PHP変数スコープの詳しい説明

墨辰丷
墨辰丷オリジナル
2018-05-10 15:06:572213ブラウズ

変数のスコープは、変数が定義されているコンテキスト (つまり、その有効スコープ) です。 JavaScript には変数スコープの概念がありません。同様の概念としてスコープがあります。ただし、JavaScript は変数の宣言時に位置を参照する字句スコープを使用しますが、PHP には変数宣言がないため、変数は初めて値が割り当てられるときに変数を宣言することと同じになります。したがって、この 2 つは同じではありません。この記事ではphpの変数スコープについて詳しく紹介します。

1. ローカル変数
ローカル変数は関数内で宣言される変数であり、その範囲は関数内に限定されます。関数のパラメーターもローカル変数です。違いは、関数のパラメーター値が呼び出し時に渡される値から取得されることです。実行後、関数内のすべての動的変数が解放されます。

<?php
    function a($b){
        $c = 1;        echo "$b+$c = " . ($b+$c) . &#39;<br />&#39;;
    }
    a(2);//输出3
    echo $b+$c;//函数外部的非法访问,报notice错误,并输出0
?>

2. グローバル変数
関数の外で定義された変数はグローバル変数と呼ばれ、その範囲は定義された変数の先頭からプログラムファイルの末尾までとなります。
さらに、グローバル変数を関数内で直接呼び出すことはできません。グローバルの代わりに $GLOBALS というキーワードを使用することもできます。 $GLOBALS はスーパーグローバル変数です。

<?php
    //示例1
    $a = 1;    $b = 2;    function Sum(){
        global $a, $b;        $b = $a + $b;
    }
    Sum();    echo $b;//输出的结果是3

    //示例2
    $c = 1;    $d = 2;    function Sum()
    {
        $GLOBALS[&#39;d&#39;] = $GLOBALS[&#39;c&#39;] + $GLOBALS[&#39;d&#39;];
    }
    Sum();    echo $d;//输出3
?>

3. 静的変数
静的変数はローカル関数スコープ内にのみ存在しますが、プログラムの実行がこのスコープを離れても、その値は失われません。静的変数は static で宣言され、静的に宣言されていない変数はデフォルトで動的変数になります。関数の実行後、内部静的変数はすでにメモリに保存されています。これは、スクリプトの実行中に初めて関数が呼び出されたときにのみ初期化されます。

<?php
    function test()
    {
        static $a = 0;        echo $a;        $a++;
    }
    test();//输出0
    test();//输出1
?>

静的変数は、再帰関数を処理する方法も提供します。再帰関数は、それ自体を呼び出す関数です。再帰関数を作成するときは、無限に再帰する可能性があるので注意してください。再帰を終了する適切な方法があることを確認する必要があります。次の単純な関数は、静的変数 $count を使用して再帰的に 10 までカウントし、いつ停止するかを決定します

<?php
    function test()
    {
        static $count = 0;        $count++;        echo $count;        if ($count < 10) {
            test();
        }        $count--;
    }
?>

関連推奨事項:

php 変数スコープ

php 変数スコープ、php グローバル変数と静的変数

PHP変数scope_PHPチュートリアルの紹介

以上がPHP変数スコープの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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