PHP 中的引用

下面看一个例子:

<?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 也是同样道理

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据