热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP中的引用机制并非指针,了解其背后的原理与输出差异

12345678910111213141516171819202122 上面是我自己运行的结果。手册上是这么说的,不知道说的是什么:引用不是什么如前所述,引用不是指针。这意味着下面的结构不会产生你预期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 


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;



?>

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



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

引用不是什么



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

1
2
3
4
5
6
7

function foo (&$var)

{

    $var =& $GLOBALS["baz"];

}

foo($bar);

?>

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

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


   



推荐阅读
author-avatar
手机用户2502875023
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有