时间:2021-05-26
引用返回
手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用
当你想将函数的返回引用绑定到某个变量时,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;echo returns_reference(); //101可见,想让函数返回引用,必须在函数申明和赋值时都带上&操作符.
对于类中方法也是如此:
class foo { public $value = 0; public function &getValue() { return $this->value; }} $obj = new foo;$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.$obj->value = 2;echo $myValue;一些简单的例子
看下面的简单例子,尝试去理解引用返回.
<?phpfunction &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?>//程序运行结果:1236尽管函数声明方式是 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函数能有所帮助,如果有疑问大家可以留言交流。谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
函数返回值和返回引用是不同的函数返回值时会产生一个临时变量作为函数返回值的副本,而返回引用时不会产生值的副本,既然是引用,那引用谁呢?这个问题必须清楚,否则将无
本文实例讲述了PHP函数按引用传递参数及函数可选参数用法。分享给大家供大家参考,具体如下:一、函数按引用传递参数1.代码按引用传递方式2.运行结果在函数内:$m
python里使用正则的findall函数的实例详解在前面学习了正则的search()函数,这个函数可以找到一个匹配的字符串返回,但是想找到所有匹配的字符串返回
本文实例分析了php中引用&的用法。分享给大家供大家参考,具体如下:php的引用(就是在变量或者函数、对象等前面加上&符号)//最重要就是删除引用的变量,只是引
python中chrunichrord函数的实例详解chr()函数用一个范围在range(256)内的(就是0~255)整数作参数,返回一个对应的字符。unic