作用域(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未定义 }
作用:
用於局部作用域中,修飾一個跟全域變數同名的局部變數。
此時該局部變數也可以使用全域變數的值了-其實他們其實是類似變數引用關係。
其作用類似:$GLOBALS
$a = 10; function sum(){ global $a ; //全局变量的引用的别名 $a++; $b = $a + 1; echo $b; } sum(); // 12 echo $a ; // 11
以上是php變數的作用域的詳細內容。更多資訊請關注PHP中文網其他相關文章!