首頁  >  文章  >  後端開發  >  php變數的作用域

php變數的作用域

angryTom
angryTom原創
2019-08-22 10:56:025877瀏覽

php變數的作用域

作用域(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變數的作用域的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn