• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 超全局变量

    超全局变量是在全部作用域中始终可用的内置变量

    说明

    PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行global $variable;就可以访问它们。

    这些超全局变量是:

    • $GLOBALS
    • $_SERVER
    • $_GET
    • $_POST
    • $_FILES
    • $_COOKIE
    • $_SESSION
    • $_REQUEST
    • $_ENV

    更新日志

    版本说明
    4.1.0超全局变量被引入到 PHP.

    注释

    Note:变量可用性

    默认情况下,所有的超全局变量都是可用的。但是,有一些指令会影响这种可用性。更多信息,参见文档variables_order.

    Note:处理 register_globals

    如果已经弃用的register_globals指令被设置为on那么局部变量也将在脚本的全局作用域中可用。例如,$_POST['foo']也将以$foo的形式存在。

    相关信息,参见 FAQ “register_globals 对我有什么影响?”

    Note:可变变量

    在函数或类方法中,超全局变量不能被用作可变变量。

    参见

    • 变量作用域
    • variables_order指令
    • 过滤器扩展
    Since PHP 5.4, you cannot use a superglobal as the parameter to a function. This causes a fatal error:
    function foo($_GET) {
     // whatever
    }
    It's called "shadowing" a superglobal, and I don't know why people ever did it, but I've seen it out there. The easy fix is just to rename the variable $get in the function, assuming that name is unique. 
    There was no deprecation warning issued in previous versions of PHP, according to my testing, neither in 5.3 nor 5.2. The error messages in 5.4 are:
    Fatal error: Cannot re-assign auto-global variable _GET in...
    Fatal error: Cannot re-assign auto-global variable _COOKIE in...
    etc.
    // You do need global in this special situation
    function get_var($varname){
     global $$varname;
     echo $$varname;
    }
    show_var('_POST');
    For those wondering if register_globals also makes global variables available inside functions - it doesn't.
    Running this code on a PHP52 webserver with register_globals enabled, using url:
    http://localhost?hello=campers
    <?php
    function abc() {
      echo "in func: '$hello' \n"; // outputs "in func: '' "
    }
    echo "global: '$hello' \n"; // outputs "global: 'campers' "
    abc();

    下篇:$GLOBALS