• 前端学PHP之变量范围


    前面的话

      变量范围即它定义的上下文背景(也就是它的生效范围)。在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'];
    }
    ?>
  • 相关阅读:
    liunx挂载Ios镜像文件
    liunx下删除多个目录下的相同文件
    tomcat启动报错:Unable to complete the scan for annotations for web application [] due to a StackOverflow
    lr中controller 中scenario-> rendezvous显示灰色不可用
    liunx 下在指定文件夹下搜索字符
    python运行时提示:dot not in the path
    1.4 python 类型转换函数
    js字符串拼接
    自己写的时间轴空控件
    ios禁止页面下拉
  • 原文地址:https://www.cnblogs.com/xiaohuochai/p/6039493.html
Copyright © 2020-2023  润新知