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没有变那是因为作用域的问题。