PHP的局部、静态、全局和超全局变量的使用和区别

2020-12-17 15:21 By "Powerless" 3289 0 1

【局部变量与全局变量】

    在 PHP 中中全局变量和局部变量的定义是和 C 语言类似的。

    在函数外定义的变量称为全局变量,在函数内定义的是局部变量。

    但是,想要在函数内部使用全局变量却不可以直接使用,而是要先通过 global 关键字声明:

<?php
$gVar1 = "hello";
$gVar2 = "world!!";

say_hello();

function say_hello()
{
    global $gVar1;
    echo $gVar1;
    echo $gVar2;
}

运行结果:

hello
Notice: Undefined variable: gVar2 in E:\Wnmp\html\index.php on line 11

    可以看到,结果只输出了 hello,然后就报错了。

    因为在函数外定义了两个全局变量,而在函数内部只有$gVar1用 global 关键字声明了,所以能正常输出 hello。

    因为$gVar2没有 global 声明,所以,PHP 认为$gVar2是一个局部变量,而函数内部又没有定义该局部变量,所报错说:Undefined variable:gVar2 …

    在函数内部使用全局变量还可以通过$GLOBALS 数组实现:

<?php
$gVar1 = "hello";
$gVar2 = "wzxaini9.cn !!!";
hello();
function hello()
{
    $localVar = $GLOBALS['gVar1'] . " " . $GLOBALS['gVar2'];
    echo $localVar;
}

输出结果:

hello wzxaini9.cn !!!


【超全局变量】

    上面所用的这个$GLOBALS 其实是一个超全局变量,超全局变量的生效范围要比全局变量大。

    超全局变量只要被定义了,无论是在函数外部还是函数内部,都可以直接使用,无需额外的声明(与 C 语言的全局变量一样)。

    PHP 预定义变量中的超全局变量:

        $GLOBALS

        $_SERVER

        $_GET

        $_POST

        $_FILES

        $_COOKIE

        $_SESSION

        $_REQUEST

        $_ENV


【静态变量】

静态变量和 C 语言中的作用一样:

<?php
hello();
hello();
hello();
function hello()
{
    static $staticVar = 0;
    $staticVar+=66;
    echo $staticVar;
    echo "</br>";
}

输出结果:

88
176
264

    可以看到调用三次函数,输出的结果是不一样的。

    因为静态变量只会进行一次初始化定义,虽然它的生效范围仅限于函数内部,然而,它的生命周期却不等于函数的生命周期。

    也就是说当函数执行完并返回后,静态变量是不会像局部变量一样被销毁的,而是保持着函数返回之前的状态,等待函数的下一次调用。


评 论

View in WeChat

Others Discussion

  • MySQL中的行级锁,表级锁,页级锁
    Posted on 2018-08-25 11:00
  • MySQL分组
    Posted on 2019-11-18 14:00
  • PHP练习-爬楼梯问题
    Posted on 2020-08-14 23:56
  • PHP8.1 性能基准测试
    Posted on 2022-10-08 17:40
  • MySQL事务介绍
    Posted on 2019-06-05 18:14
  • 必学十大经典排序算法,看这篇就够了
    Posted on 2019-11-18 16:30
  • 巧用CAS解决数据一致性问题
    Posted on 2019-03-07 11:55
  • PHP练习-无重复字符的最长子串
    Posted on 2020-09-17 18:03