PHP函数引用返回的实例详解
引用返回
手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用
当你想将函数的返回引用绑定到某个变量时,PHP允许你这么做:
function&returns_reference()
{
static$someref=0;
$someref++;
return$someref;
}
$newref=&returns_reference();//引用返回,相当于$newref=&$someref;
echo$newref;//1
//phpfensi.com
$notref=returns_reference();//值传递的是副本
$newref=100;
echo$notref;//2
$newref=100;
echoreturns_reference();//101
可见,想让函数返回引用,必须在函数申明和赋值时都带上&操作符.
对于类中方法也是如此:
classfoo{
public$value=0;
publicfunction&getValue(){
return$this->value;
}
}
$obj=newfoo;
$myValue=&$obj->getValue();//$myValueisareferenceto$obj->value,whichis42.
$obj->value=2;
echo$myValue;
一些简单的例子
看下面的简单例子,尝试去理解引用返回.
<?php
function&test()
{
//声明一个静态变量
static$b=0;
$b=$b+1;
echo$b;
return$b;
}
$a=test();//这条语句会输出$b的值为1
$a=5;
$a=test();//这条语句会输出$b的值为2
$a=&test();//这条语句会输出$b的值为3
$a=5;
$a=test();//这条语句会输出$b的值为6
?>
//程序运行结果:
1
2
3
6
尽管函数声明方式是function&test()这样,但我们通过这种方式$a=test()的函数调用得到的其实不是函数的引用返回,这跟普通的函数调用没有区别。PHP规定通过$a=&test()这种方式得到的才是函数的引用返回。
用上面的例子来解释就是,$a=test()这种方式调用函数,只是将函数的值赋给$a而已,而$a做任何改变都不会影响到函数中的$b。
而通过$a=&test()方式调用函数呢,它的作用是将return$b中的$b变量的内存地址与$a变量的内存地址指向了同一个地方。即产生了相当于这样的效果($a=&$b),所以改变$a的值也同时改变了$b的值。
所以在执行了
$a=&test(); $a=5;
以后,$b的值变为了5。
再来个程序例子加深理解:
<?php
/*
**值传递和引用传递,值传递传递的是值的一个复本,引用传递传递的是值指向的内存地址
*/
//函数的引用,定义时也要加上&
function&func($a,$b){
//这里为了更直观看到效果,定义一个静态变量
static$result=0;
$result+=$a+$b;
echo$result.'<br/>';
return$result;
}
$a=$b=10;
//PHP里这样写函数的引用调用,和调用普通函数没有区别(只是将函数的返回值复制给$c这个变量,$c做任何改变不会影响上面函数中的$result)
//要记住:PHP里的函数引用定义及调用都要在函数名前加上&
$c=func($a,$b);
//第一次执行func(),其静态变量$result的值变为20(10+10)
//改变$c的值,不会对下面一行语句产生影响
$c=666;
//第二次执行func(),其静态变量$result的值变为40(20+10+10)
$c=func($a,$b);
echo'<hr/>';
//这样才是PHP中引用函数的调用方式
$d=&func($a,$b);
//第三次执行func(),其静态变量$result的值变为40(40+10+10)
$d=888;
//第四次执行func(),其静态变量$result的值变为908(888+10+10)
$d=func($a,$b);
?>
总结
关于php函数引用返回的内容到这就基本结束了,希望对大家学习或使用PHP函数能有所帮助,如果有疑问大家可以留言交流。谢谢大家对毛票票的支持。