文章出處

前面的話

  變量范圍即它定義的上下文背景(也就是它的生效范圍)。在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'];
}
?>

文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()