Home  >  Article  >  Backend Development  >  引用传递 - php的引用不是指针到底是什么,看看这个输出结果

引用传递 - php的引用不是指针到底是什么,看看这个输出结果

WBOY
WBOYOriginal
2016-06-06 20:36:491192browse

<code> <?php function foo (&$c)
{
    global $b;
    $b = 3;
    //$c = &$b;
    //echo $c;      //输出 2 3 2
    $c = $b;    
    echo $c;        //输出 2 3 3

}


$a = 2;
echo $a.' ';

foo($a);

echo $a;

?> 
</code>

上面是我自己运行的结果。

手册上是这么说的,不知道说的是什么:

引用不是什么

如前所述,引用不是指针。这意味着下面的结构不会产生你预期的效果:

<code><?php function foo (&$var)
{
    $var =& $GLOBALS["baz"];
}
foo($bar);
?>
</code>

这将使 foo 函数中的 $var 变量在函数调用时和 $bar 绑定在一起,但接着又被重新绑定到了 $GLOBALS["baz"] 上面。不可能通过引用机制将 $bar 在函数调用范围内绑定到别的变量上面,因为在函数 foo 中并没有变量 $bar(它被表示为 $var,但是 $var 只有变量内容而没有调用符号表中的名字到值的绑定)。

自己的理解是$c已经是一个引用了,PHP不允许再给它赋上另一个引用。如果再给它赋上另一个引用,那么这个引用$c就跟$a变量自动断开联系,所以输出了两个2。不知道这样理解对不对

回复内容:

<code> <?php function foo (&$c)
{
    global $b;
    $b = 3;
    //$c = &$b;
    //echo $c;      //输出 2 3 2
    $c = $b;    
    echo $c;        //输出 2 3 3

}


$a = 2;
echo $a.' ';

foo($a);

echo $a;

?> 
</code>

上面是我自己运行的结果。

手册上是这么说的,不知道说的是什么:

引用不是什么

如前所述,引用不是指针。这意味着下面的结构不会产生你预期的效果:

<code><?php function foo (&$var)
{
    $var =& $GLOBALS["baz"];
}
foo($bar);
?>
</code>

这将使 foo 函数中的 $var 变量在函数调用时和 $bar 绑定在一起,但接着又被重新绑定到了 $GLOBALS["baz"] 上面。不可能通过引用机制将 $bar 在函数调用范围内绑定到别的变量上面,因为在函数 foo 中并没有变量 $bar(它被表示为 $var,但是 $var 只有变量内容而没有调用符号表中的名字到值的绑定)。

自己的理解是$c已经是一个引用了,PHP不允许再给它赋上另一个引用。如果再给它赋上另一个引用,那么这个引用$c就跟$a变量自动断开联系,所以输出了两个2。不知道这样理解对不对

你理解的是对的。引用 也是相对于整数,浮点型的一种数据类型,给它赋另外一个值当然就把原本的给覆盖掉了。另外为什么unset()函数 可以断开引用的关系,这是这么个道理。

不知道你理解得意思
但这个就是C中指针得标准结果吧
第一个形参是个引用,但$a传的是变量,变量内存得内容是2,&$a才是指针,&$a表达式得值是a代表得内存得地址
第一个foo中你传递一个$a就是传了个2,这那是a得地址啊。
而且就算是c语言中foo(int *p)你调用时foo(&a);然后你a=2,最后在print a,他输出得也是2啊,你的print 星a(这个星打不出来)!

你不传地址怎么可能改变外部变量呢?
你得传地址!
我还真就没理解php中的引用,和c中的指针有什么区别

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn