global声明变量就是对外部变量的同名引用,变量本身的作用范围仍然在函数体内。改变这些变量的值,外部的同名变量自然也改变。
<?php
$var1 = 1;
$var2 =[1,2];
function test_global()
{
global $var1,$var2;
$var1=&$var2;
print_r($var1);
$var1=7;
// echo $var1."\n";
// $var2=3;
}
test_global();
print_r($var1);
print_r($var2);
?>
输出的结果:1和7.
原因:因为global 引用了外部的$var1 然后内部引用发生变化变成引用$var2 而外部的$var1并没有被赋值。更通顺可以用指针来理解,在方法test_global方法中$var1指针指向&$var2这时$var1和$var2是相同的一个对象,那为什么外部没有$var1没有变那是因为作用域的问题。