<?php
function f1() {
global $v1,$v2;
$v2 = &$v1;
echo 'f1函数里:'."<br/>v1:".$v1."<br/>v2:".$v2;
}
function f2() {
$GLOBALS["v3"] = &$GLOBALS["v1"];
$v1 = $GLOBALS["v1"];
$v3 = $GLOBALS["v3"];
echo 'f2函数里:'."<br/>v1:".$v1."<br/>v3:".$v3;
}
$v1 = 5;
$v2 = $v3 = 0;
f1();
echo "<br/><br/>f1函数之后:<br/>";
echo "v1: ".$v1."<br/>";
echo "v2: ".$v2."<br/>";
echo "<br/>";
f2();
echo "<br/><br/>f2函数之后:<br/>";
echo "v1: ".$v1."<br/>";
echo "v3: ".$v3."<br/>";
输出:
f1函数里:
v1:5
v2:5
f1函数之后:
v1: 5
v2: 0
f2函数里:
v1:5
v3:5
f2函数之后:
v1: 5
v3: 5
php中的函数所产生的变量都是函数的私有变量,那么global关键字产生的变量也肯定逃不出这个规则
例如:
<?php
function test() {
global $a;
unset($a);
}
$a = 1;
test();
echo $a;
输出:
1
为什么会输出1呢?不是已经把$a给unset了吗?unset失灵了?php的bug?
都不是,其实unset起作用了,是把test函数中的$a给unset掉了,可以在函数后面加入