下面看一个例子:
<?php
$a = ‘AAA’;
$c = ‘CCC’;
function ref(&$c) {
global $a;
$b = ‘aaa’;
$a = $b;
$c = $b;
}
ref($c);
echo "a=".$a."\n";
echo ‘c=’.$c;
exit;
?>
输出结果应该是(实际也是这个结果):
a=aaa
c=aaa
稍加修改如下:
<?php
$a = ‘AAA’;
$c = ‘CCC’;
function ref(&$c) {
global $a;
$b = ‘aaa’;
$a = &$b;
$c = &$b;
}
ref($c);
echo "a=".$a."\n";
echo ‘c=’.$c;
exit;
?>
输出结果是:
a=AAA
c=CCC
对于第一种情况,$a $c 在用函数的局部变量$b赋值时,是将$b的内容复制到了函数外的一块空间内,所以即使函数执行完毕,$a $c 在函数外面的值还是被修改了
对于第二种情况,首先要理解global的含义,global $var 声明一个变量时实际上建立了一个到全局变量的引用。也就是说和这样做是相同的:
<?php
$var =& $GLOBALS["var"];
?>
这意味着,例如,unset $var 不会 unset 全局变量。而且当执行了$a = &$b后,$a 将不再是全局变量$a 的引用了,所以全局变量将不会受到影响。 而c=CCC 也是同样道理