1. 程式人生 > >php-變量範圍

php-變量範圍

腳本 上傳 參數數組 require fun reference 內置 clas esp

範圍跨度

  大部分的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”。在函數中聲明了全局變量aa和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-變量範圍