變數範圍即它定義的上下文背景(也就是它的生效範圍)。在javascript中,並沒有變數範圍這個概念,相似的可能是作用域。但是,由於javscript使用的是詞法作用域,指變數宣告時的位置;而php並不存在變數聲明,變數在第一次賦值時相當於宣告了變數。所以,二者並不相同。本文將詳細介紹php中的變數範圍
範圍跨度
大部分的PHP變數只有一個單獨的範圍。這個單獨的範圍跨度同樣包含了include和require引入的檔案
這裡變數$a將會在包含檔案b.inc中生效
<?php $a = 1; include 'b.inc'; ?>
函數範圍
在使用者自訂函數中,一個局部函數範圍將會被引入。任何用於函數內部的變數按缺省情況將被限制在局部函數範圍內
下面這個腳本不會有任何輸出,因為echo語句引用了一個局部版本的變數$a,而且在這個範圍內,它並沒有被賦值
<?php $a = 1; /* global scope */ function Test() { echo $a; /* reference to local scope variable */ } Test(); ?>
global關鍵字
# 以下腳本的輸出將是「3」。在函數中宣告了全域變數a和
b之後,對任一變數的所有參考都會指向其全域版本。對於一個函數能夠宣告的全域變數的最大個數,PHP沒有限制
<?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b;//3 ?>
在全域範圍內存取變數的第二個辦法,是用特殊的PHP自訂$GLOBALS陣列
GLOBALS是一個關聯數組,每個變數為一個元素,鍵名對應變數名,值對應變數的內容。 GLOBALS之所以在全域範圍內存在,是因為GLOBALS是一個超全域變數
<?php $a = 1; $b = 2; function Sum() { $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; } Sum(); echo $b;//3 ?>
預先定義變數
## 對於全部腳本而言,PHP提供了大量的預定義變數。這些變數將所有的外部變數表示成內建環境變量,並且將錯誤訊息表示成返回頭
下面是預先定義變數的清單
超全局变量 — 超全局变量是在全部作用域中始终可用的内置变量 $GLOBALS — 引用全局作用域中可用的全部变量 $_SERVER — 服务器和执行环境信息 $_GET — HTTP GET 变量 $_POST — HTTP POST 变量 $_FILES — HTTP 文件上传变量 $_REQUEST — HTTP Request 变量 $_SESSION — Session 变量 $_ENV — 环境变量 $_COOKIE — HTTP Cookies $php_errormsg — 前一个错误信息 $HTTP_RAW_POST_DATA — 原生POST数据 $http_response_header — HTTP 响应头 $argc — 传递给脚本的参数数目 $argv — 传递给脚本的参数数组大多數的預定義變數並不是超全域變量,它們需要用'global' 關鍵字來使它們在函數的本地區域中有效
#超全域變數
超全域變數在任何範圍內都有效,它們並不需要'global'宣告
下面是超全域變數的清單
$GLOBALS $_SERVER $_GET$_POST $_FILES$_COOKIE $_SESSION $_REQUEST $_ENV
<?php function test_global() { //预定义变量 global $HTTP_POST_VARS; echo $HTTP_POST_VARS['name']; //超全局变量 echo $_POST['name']; } ?>
以上是了解php的變數範圍的詳細內容。更多資訊請關注PHP中文網其他相關文章!