php變數的作用域

2020-07-16 10:05:41

作用域(scope),程式設計概念,通常來說,一段程式程式碼中所用到的名字並不總是有效/可用的,而限定這個名字的可用性的程式碼範圍就是這個名字的作用域。下面我們就為大家介紹一下php變數的作用域。

推薦教學:php入門視訊教學

簡單來說有3種作用域:

  區域性作用域 全域性作用域 超全域性作用域

  對應有3種變數:區域性變數 全域性變數 超全域性變數

區域性作用域和區域性變數

  就是函數內部的作用域範圍,其中的定義的變數就是區域性變數(包括形參也是區域性變數)。

  區域性變數只能在其函數內部存取。

  區域性變數在函數呼叫結束時,會被自動銷毀(可以理解為函數執行結束,該執行空間也被銷毀了)。

  由此可見,函數外部不能存取內部的區域性變數。

靜態變數:一個特殊的區域性變數

含義:

  在函數內部,使用static關鍵字修飾的變數。

形式:

  function  XXX( .... ){
                            static  $s1 = 10;  //此時,$s1就是靜態變數
                           ......
                      }

靜態變數的特點:

  靜態區域性變數的值不會在函數呼叫結束時被銷毀,而是會一直保留。

   對比:非靜態的區域性變數在函數呼叫結束時就會被銷毀!

  也就是說,當再次呼叫函數時,該變數(的值)還能繼續使用。

全域性作用域與全域性變數

   就是函數外部範圍的作用域,其中定義的變數就是全域性變數。

  全域性變數只能在其所在的全域性作用域中可以直接使用(存取)。

超全域性作用域與超全域性變數

  包括區域性作用域和全域性作用域的整個作用域範圍。

  超全域性變數可以在所有範圍中使用(存取)。

  實際上,只有有限的10來個系統預定義變數是超全域性變數,包括:$_GET, $_POST, $_REQUEST等。

  所以,系統預定義變數,也被統稱為超全域性變數。

一個特別的超全域性變數:$GLOBALS

  它也是一個陣列,其中儲存了我們自己定義的所有全域性變數。

   每個全域性變數的變數名,就是$GLOBALS陣列的一個單元。

比如:

在全域性作用域中定義如下變數:

$v1 = 1;   //這一行執行,就有了一個這個:$GLOBALS[‘v1’], 其值為1
$v2 = ‘abc’;  //這一行執行,就有了一個這個:$GLOBALS[‘v2’], 其值為’abc’
$v3 = true;  //這一行執行,就有了一個這個:$GLOBALS[‘v3’], 其值為true

作用:

可以讓我們在區域性作用域範圍中,使用全域性變數。

演示如下:

 $v1 = 10;  //全域性變數
               function  func1(  ){
                          echo  $GLOBALS[‘v1’]; //輸出10;
                          echo  $v1;    //報錯:變數v1未定義
                          $s1 = $GLOBALS[‘v1’] * 5; //結果為50;
                         $s2 = $v1 * 5;    //報錯:變數v1未定義
              }

一個特別的的關鍵字:global

作用:

   用於在區域性作用域中,修飾一個跟全域性變數同名的區域性變數。

  此時該區域性變數也可以使用全域性變數的值了——實際上他們其實是類似變數參照關係。

  其作用類似:$GLOBALS

   $a = 10;
      function sum(){
          global $a ;  //全域性變數的參照的別名
          $a++;
          $b = $a + 1;
          echo $b;
      } 
      sum(); //  12
      echo $a ; //  11

以上就是php變數的作用域的詳細內容,更多請關注TW511.COM其它相關文章!