旗下导航:搜·么
当前位置:网站首页 > PHP教程 > 正文

谈谈PHP中的global全局变量【php教程】

作者:搜搜PHP网发布时间:2019-11-26分类:PHP教程浏览:83


导读:尽人皆知,在PHP的函数中,假如想运用全局变量,一种是运用超全局变量$GLOBALS,另一种是在函数中运用global关键字声明,运用超全局变量$GLOBALS的体式格...
尽人皆知,在PHP的函数中,假如想运用全局变量,一种是运用 超全局变量 $GLOBALS,另一种是在函数中运用 global关键字声明,运用超全局变量$GLOBALS的体式格局人人都知道了,本日来好好聊一聊运用global体式格局来声明变量。

我们来看以下例子:

$a = 1;
$b = 2;
function test() {
    global $a, $b;
}
test();

当我们实行test()函数时,在内存中变量的状况是什么样的呢?以下图所示

我们声清楚明了test函数,当挪用test()函数时,global会在函数中声明两个局部变量$a, $b,而且离别指向全局变量$a和$b,此时的暂时变量$a和$b相当于全局变量$a和$b的援用。所以我们在函数中修正局部变量$a和$b的值就等同于修正了全局变量的值。

$a = 1;
$b = 2;
function test() {
    global $a, $b;
    $a = 11;
    $b = 12;
    unset($a);
    unset($b);
}
test();
echo $a;
echo '<br>';
echo $b;

浏览器上打印输出:

11
22

上面的代码中还运用了unset(),经由过程echo输出能输出全局变量$a, $b的值,这也申明test()函数里经由过程global关键字声明的$a和$b只是局部变量,unset()只是断开了局部变量与全局变量的援用。

我们来看另一种状况,假如我们在test函数中声明的变量在全局变量中并没有呢?

先说结论:假如在函数中运用global关键字声明的变量在全局作用域并没有同名变量,那末会先建立同名全局变量,再在函数中建立局部变量,同时将全局变量的援用指向局部变量。

function test() {
    global $a, $b;
    $a = 11;
    $b = 22;
    unset($a);
    unset($b);
}
echo $a;
echo '<br>';
echo $b;

经由过程浏览器输出:

11
22

上面的代码,我们在test函数中运用global声清楚明了变量$a, $b,虽然全局作用域并没有声明$a和$b,然则global依旧会先建立全局变量$a和$b,然后在test函数中建立$a, $b,然后把全局变量的援用指向test函数的局部变量。所以纵然我们在函数中unset了$a和$b,在函数实行完成后我们依旧能打印出$a和$b,由于全局变量中已存在着两个变量了。

所以我们终究可以对得出以下结论:

在函数中运用global声明变量时,会先在全局作用域查找是不是有同名变量,假如有则将该全局变量的援用指向运用global声明的同名局部变量。假如全局作用域没有同名变量,那末就先建立同名全局变量,再建立局部变量,然后把全局变量的援用指向局部变量。

相干教程:PHP视频教程

以上就是谈谈PHP中的global全局变量的细致内容,更多请关注ki4网别的相干文章!

标签:PHPglobal全局变量