php 引用传递
时间:2011-12-21
来源:互联网
如下,
按照道理
$a=1;$b=2;
$a=&$b;
$b=5;
echo 'a:'.$a."b:".$b; //输出都是5,这里$a=&$b这句导致$a,$b保持同一个引用。
下面的就不理解了
$a=1;$b=2;
function t(&$a,&$b){
$a=&$b;
$a=5;
}
t($a,$b);
echo 'a:'.$a.'b:'.$b; //结果出于意料。$a输出1,$b输出5.
是怎么回事呢?
按照道理
$a=1;$b=2;
$a=&$b;
$b=5;
echo 'a:'.$a."b:".$b; //输出都是5,这里$a=&$b这句导致$a,$b保持同一个引用。
下面的就不理解了
$a=1;$b=2;
function t(&$a,&$b){
$a=&$b;
$a=5;
}
t($a,$b);
echo 'a:'.$a.'b:'.$b; //结果出于意料。$a输出1,$b输出5.
是怎么回事呢?
作者: hero1010 发布时间: 2011-12-21
我原来的理解,php的引用类似C里面的指针,通过你这个例子看来是不一样的,一下是我的理解,不一定正确
PHP code
PHP code
$a=1;$b=2; function t(&$a,&$b){ $a=&$b; $a=5; } t($a,$b); echo 'a:'.$a.'b:'.$b; 首先函数t里面的参数$a,$b是函数内部的变量和外面定义的$a,$b是完全不一样的,你都写成$a,$b容易混淆,其实函数改成这样是一样的(和函数参数是$a和$b的时候,调试的结果是一样的): function t(&$c,&$d){ $c=&$d; $c=5; } 当用xdebug调试的时候, function t(&$c,&$d){ $c=&$d; xdebug_debug_zval( 'd' ); xdebug_debug_zval( 'c' ); $c=5; } 调试的结果是: d: (refcount=4, is_ref=1),int 2 c: (refcount=4, is_ref=1),int 2 关于refcount和is_ref可以参考一下手册: http://php.net/manual/zh/features.gc.refcounting-basics.php 为什么这里refcount是4那?可能是: 1.$b=2;这一句就创建了一个容器,并有1个符号指向了这个容器,此时count=1 2.function t(&$c,&$d) 调用此函数时,函数内部变量$d也作为一个符号指向了这个容器,此时count=2 3.$c=&$d; 里面的"&$d"也复制了一个指向此容器的符号,此时count=3 4.$c=&$d; $c也是一个指向此容器的符号,所以count=4 当函数运行到$c=5;时,自然函数外部的变量$b也变成了5,因为他们都是指向同一个容器的符号. 外部变量$a,在函数内部先是产生了一个指向$a的容器的符号$c, 但是当$c=&$d;时,$c有变成了指向外部变量$b的容器的符号,所以外部变量$a在函数内部没有参与运算,所以还是1啊
作者: sink 发布时间: 2011-12-22
函数体内的语句$a=&$b;
变量a是b的引用,执行到这里的时候,要产生分离。。。
分离的结果就是$a成了函数内的局部变量
变量a是b的引用,执行到这里的时候,要产生分离。。。
分离的结果就是$a成了函数内的局部变量
作者: amani11 发布时间: 2011-12-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28