PHP语言global与static注意事项

@心欲无痕  July 19, 2018

global关键字

大家都知道在 PHP 语言中有 global关键字,用以表示全局变量,其实 global内部就是将变量以引用进行处理,如:

$var = 10;

function get_global()
{
    global $var;
    echo $var; // 10
    $var = 80;
}

echo $var;     // 80

get_global();

但是注意了,如果使用了引用,那么就会出现这个问题:

$var = 10;
$val = 5;

function get_global()
{
    global $var, $val;
    $val = &$var;

    echo $val . PHP_EOL; // 10
    echo $var . PHP_EOL; // 10
}


echo $val . PHP_EOL;     // 5
echo $var . PHP_EOL;     // 10

get_global();

尤其需要注意 PHP变量的作用域与机制,在 PHP 中函数内的变量是局部变量,跟全局变量是一个临时副本,不会影响全局变量,除非使用同名的 global 引用。

static 关键字

static关键字,表示静态变量,含义就是当变量脱离了作用域后,变量不会销毁,下次运行的时候,变量会保留上次的值,而不会重新运行 static赋值初始化语句了 ,如:

function get_static()
{
    static $var = 1;
    echo $var++;      // 第一次调用,输出 `1`,第二次调用,输出 `2`
}

get_static();
get_static();

注意 static变量不会进行第二次赋值的,除非在定义之后进行了赋值:

function get_static()
{
    static $var = 1;
    $var = 10;
    echo $var++;    // 两次调用 `get_static()`函数,都输出 `10`
}

get_static();
get_static();

各位如果在 PHP面试中,碰到了这种问题一定要谨记。


评论已关闭