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函数能有所帮助,如果有疑问大家可以留言交流。谢谢大家对毛票票的支持。