php-变量范围

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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”。在函数中声明了全局变量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-变量范围的主要内容,如果未能解决你的问题,请参考以下文章

URL的PHP​​和哈希/片段部分

PHP基础-自定义函数-变量范围-函数参数传递

在 PHP 中将包含数字范围的 GET 变量转换为字符串

php-变量范围

PHP之变量范围

超级有用的9个PHP代码片段