global与$GLOBALS

global与$GLOBALS

在php中:

$GLOBALS定义:引用全局作用域中可用的全部变量(一个包含了全部全局变量的全局组合数组变量的名字就是数组的键),与所有其他超全局变量不同,$GLOBALS在PHP代码中任何地方总是可用的,自己可以通过打印$GLOBALS这个变量的结果就知道了。

global:在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量。

例子

global

&获取值的地址,例如&$var2为$var2的地址。

变量可以传值也可以传地址(加&就传的是地址)。

global定义的别名变量,在函数内部直接操作的是别名变量,而不是变量本身。

image-20210220195254082

<?php
$var1 = 8;
$var2 = 9;
function test(){
    
    
	global $var1,$var2; //相当于为$var1,$var2传了全局变量中$var1,$var2的地址($var1=&$GLOBALS['var1'])
    //也就是让函数内的$var1,$var2分别指向了全局变量的$var1,$var2
    $var1 = &$var2;  //将$var2的地址(也是全局变量$var2的地址)传给$var1,此时$var1指向$var2(也就是全局变量$var2)
    echo "<p>$var1</p>"; //输出为9
}
test();
echo "<p>$var1</p>";  //输出为8,说明
?>

例子

$GLOBALS

$GLOBALS[]确确实实调用是外部的变量,函数内外会始终保持一致。

$GLOBALS的使用作用在函数本身的值

<?php
$var1 = 5;
$var2 = 8;
function test(){
    
    
	$GLOBALS['var1'] = $GLOBALS['var2'];
}
test();
echo "<p>$var1</p>";  //输出为8,说明$GLOBALS的使用作用在函数本身的值
?>

&符号的使用

而对于函数:通常情况下函数内是一个封闭的环境,函数内部是一个独立的环境,在某些特定场合下,需要函数的返回值被外部引用

这时候要考虑用&符号:

<?php
function test_(&$a){
    
    
    $a =  $a + 100;
    echo $a;   //这里输出的122
}
$a = 22;
test_($a);  //此时传入的是$a的地址,所以函数会对$a地址所对应的值直接操作,运行结果为$a=122
$a = $a +22;
echo "<pre>";
echo $a;  //打印144;
?>

对比不用&符号时:

<?php
function test_($a){
    
    
    $a =  $a + 100;
    echo $a;   //这里输出的122
}
$a = 22;
test_($a);  //此时传入的是$a,此时函数处理后的值只在函数内部有效
$a = $a +22;
echo "<pre>";
echo $a;  //打印44;
?>

猜你喜欢

转载自blog.csdn.net/qq_43665434/article/details/113895522