PHPにおける$GLOBALSとglobalの違い

3253 ワード

PHPの定義済み変数の多くは「スーパーグローバル」であり、スクリプトのすべての役割ドメインで使用できることを意味します.関数またはメソッドでglobal$variableを実行する必要はありません.アクセスできます.
これらのスーパーグローバル変数は次のとおりです.
  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

  • 1)$GLOBALS-グローバル役割ドメインで使用可能なすべての変数を参照します.
    2)すべての変数を含むグローバルコンビネーション配列.変数の名前は配列のキーです.
    3)出現したグローバル変数は$GLOBALSという配列で取得できる.
    4)PHPライフサイクル中、
    関数体の外部に定義されるいわゆるグローバル変数は,関数内部では直接得られない.
    
    $var = "global variable";
    $var2 = "global variable2";
    function test() {
        $var = "local variable";
        echo '$var in current scope: ' . $var . "<br>";//            $var
        echo '$var in global scope: ' . $GLOBALS["var"] . "<br>";//            $var
        //echo '$var2 in global scope: ' . $var2 . "<br>"; //             $var2   
    }
    test();
    出力:
    $var in current scope: local variable
    $var in global scope: global variable
    上記の例では、外部にアクセスする$varは、includeファイルを介して入力される外部グローバル変数にも適用される$GLOBALS配列を使用する必要があります.関数の内部から外部に直接アクセスするグローバル変数でエラーが発生します.PHPのグローバル変数とC言語は少し異なり、ローカル変数で上書きされない限り、C言語ではグローバル変数が関数で自動的に有効になります.
    PHPにはglobalも同様の機能があり、$GLOBALSとの違いは以下の通りである.
    1)globalは、真の関数外部変数ではなく、関数外部変数を指す別名変数を関数に生成する.
    function test() {
        global $var1, $var2;
        $var2 = &$var1;//  $var1         $varl   
    }
    function test2() {
        $GLOBALS['var3'] = &$GLOBALS['var1'];
    }
    $var1 = 100;
    $var2 = $var3 = 0;
    test();
    echo $var2 ."<br/>";
    test2();
    echo $var3 ."<br/>";
    出力:
    0
    100
    2)$GLOBALS[]は確かに外部の変数であり、関数の内外は常に一致している.
    function test() {
        global $var1;
        $var1 = 200;
        unset($var1);//                       ,              。
    }
    function test2() {
        $GLOBALS['var1'] = 300;//  $GLOBALS['var1']        $var1      
        unset($GLOBALS['var1']);// $GLOBALS['var1']    ,       ,   $var1 <em>Undefined  </em>。
    }
    $var1 = 100;
    test();
    echo $var1 . "<br/>";
    test2();
    echo $var1 . "<br/>";

    出力:200$var 1 Undefindエラー
    クラス内のメンバー変数の場合、クラス内の関数は$this->でアクセスする必要があります.$GLOBALSではアクセスできません.globalの役割はグローバル変数を定義することですが、このグローバル変数はウェブサイト全体に適用されるのではなく、includeまたはrequireのすべてのファイルを含む現在のページに適用されます.関数体内で定義されたglobal変数は、関数体外で使用でき、関数体内でglobalで修飾されない限り、関数体外で定義されたglobal変数は関数体内で直接使用できません.
    $global $a; 
    $a=100; 
    function f() 
    { 
      echo $a; //  , 
    } 
    

    関数内部のグローバル変数では、外部アクセス時に関数内部のグローバル変数の別名が使用されます.
    function test() {
        global $var1;
        $var1 = '100';
        unset($var1);
    }
    test();
    $var2 = &$var1;
    unset($var1);
    echo $var2;

    出力:100結果から、unsetは変数名と変数値の接続を切断するだけで、変数の値はすぐに破棄されず、関数内部で定義されたグローバル変数については、実際には外部で別名が使用されているだけなので、外部では$var 1の値にアクセスできます.関数の内部$GLOBALSのグローバル変数で、関数の外部に直接アクセスできます.
    $x = 75; 
    $y = 25;
    function test() { 
      $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
    }
    test(); 
    echo $z; 

    出力:100は、zが$GLOBALS配列の変数であるため、関数以外でもアクセスできます.