ホームページ >バックエンド開発 >PHPチュートリアル >引用传递 - php的引用不是指针到底是什么,看看这个输出结果

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

WBOY
WBOYオリジナル
2016-06-06 20:36:491237ブラウズ

<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中的指针有什么区别

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。