免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 948 | 回复: 0
打印 上一主题 下一主题

PHP的引用返回 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-30 20:32 |只看该作者 |倒序浏览
手册中的解释:
引用返回
引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理
的技术原因时才返回引用!要返回引用,使用此语法:
$foo =& find_var($bar);
$foo->x = 2;
?>  
本例中 find_var 函数所返回的对象的属性将被赋值,而不是拷贝,就和没有用引用语法一样。
注: 和参数传递不同,这里必须在两个地方都用 & 符号――指出返回的是一个引用,而不是通常的一个拷贝,同样也指出 $foo 是作为引用的
绑定,而不是通常的赋值。
注: 如果试图这样从函数返回引用:return ($found_var);,这将不会起作用,因为在试图返回一个表达式的结果而不是一个引用的变量。只
能从函数返回引用变量――没别的方法。如果代码试图返回一个动态表达式或 new 运算符的结果,自 PHP 4.4.0 和 PHP 5.1.0 起会发出一条
E_NOTICE 错误。
不太理解,在网上搜了一个帖子:http://www.phpx.com/happy/thread-116613-1-11.html看了一下,
我的理解是:
====================================================
function b($var)
{
//code .........
return $var;
}
$a = new ClassName();
$c = b($a);
====================================================
1.创建了某个类的一个实例$a;
2.想用函数b($var)来处理$a;
3.再把处理后的对象返回给$c;
在php5发前默认都是按值传递的(也就是传递拷贝),把$a当做实参传给b($var)的时候,在函数内部操作的是一个$a的拷贝。当函数执行完以后
,把操作完的对象$a返回给$c的时候($c = b($a);)$c接收到的又是一个拷贝。在这样一个过程中,前后将出现3个对象的拷贝($a,函数体
内,$c)。这并不是我们想见到的,所以,可以用引用返回来解决这个问题。
====================================================
function &b(&$var)
{
//code .........
return $var;
}
$a = new ClassName();
$c =& b($a);
====================================================
这样写的话,函数按引用接收一个实参,函数体内操作的是$a的别名,其实操作的就是$a。而函数返回的也是$a(在定义函数时,函数名前加一
个'&'表示函数返回一个引用),这样$c其实就是$a的一个别名而已。
不知我的理解是否正确,高人见了一定要指点一下。:)


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/19983/showart_120579.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP