PHP的引用返回
时间:2006-05-30 来源:riverking23
手册中的解释:
引用返回
引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理
的技术原因时才返回引用!要返回引用,使用此语法:
$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的一个别名而已。
不知我的理解是否正确,高人见了一定要指点一下。:)
引用返回
引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理
的技术原因时才返回引用!要返回引用,使用此语法:
$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的一个别名而已。
不知我的理解是否正确,高人见了一定要指点一下。:)
相关阅读 更多 +