首頁  >  文章  >  後端開發  >  了解php的變數範圍

了解php的變數範圍

怪我咯
怪我咯原創
2017-06-19 15:06:131247瀏覽

變數範圍即它定義的上下文背景(也就是它的生效範圍)。在javascript中,並沒有變數範圍這個概念,相似的可能是作用域。但是,由於javscript使用的是詞法作用域,指變數宣告時的位置;而php並不存在變數聲明,變數在第一次賦值時相當於宣告了變數。所以,二者並不相同。本文將詳細介紹php中的變數範圍

範圍跨度

  大部分的PHP變數只有一個單獨的範圍。這個單獨的範圍跨度同樣包含了include和require引入的檔案

  這裡變數$a將會在包含檔案b.inc中生效

<?php
$a = 1;
include &#39;b.inc&#39;;
?>

函數範圍

  在使用者自訂函數中,一個局部函數範圍將會被引入。任何用於函數內部的變數按缺省情況將被限制在局部函數範圍內

  下面這個腳本不會有任何輸出,因為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[&#39;b&#39;] = $GLOBALS[&#39;a&#39;] + $GLOBALS[&#39;b&#39;];
}
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[&#39;name&#39;];
    //超全局变量
    echo $_POST[&#39;name&#39;];
}
?>


 

以上是了解php的變數範圍的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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