函数引用与php中变量引用一样使用的是&符号了,今天我们就一起来看看函数的引用返回的一些例子,希望这些例子能够对各位有帮助.
引用返回
手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用
当你想将函数的返回引用绑定到某个变量时,PHP允许你这么做:
01
function &returns_reference()
02
{
03
static $someref = 0;
04
$someref++;
05
return $someref;
06
}
07
08
$newref = &returns_reference();//引用返回,相当于 $newref = &$someref;
09
echo $newref;//1
10
//phpfensi.com
11
$notref = returns_reference();//值传递的是副本
12
$newref = 100;
13
echo $notref;//2
14
15
$newref = 100;
16
echo returns_reference();//101
可见,想让函数返回引用,必须在函数申明和赋值时都带上&操作符.
对于类中方法也是如此:
01
class foo {
02
public $value = 0;
03
04
public function &getValue() {
05
return $this->value;
06
}
07
}
08
09
$obj =new foo;
10
$myValue = &$obj->getValue();// $myValue is a reference to $obj->value, which is 42.
11
$obj->value = 2;
12
echo $myValue;
一些简单的例子
看下面的简单例子,尝试去理解引用返回.
01
02
function &test()
03
{
04
// 声明一个静态变量
05
static $b = 0;
06
$b =$b+1;
07
echo $b;
08
return $b;
09
}
10
$a = test();//这条语句会输出 $b 的值为 1
11
$a = 5;
12
$a = test();//这条语句会输出 $b 的值为2
13
$a = &test();//这条语句会输出 $b 的值为3
14
$a = 5;
15
$a = test();//这条语句会输出 $b的值 为6
16
?>
17
//程序运行结果:
18
1
19
2
20
3
21
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。
再来个程序例子加深理解:
01
02
/*
03
** 值传递和引用传递,值传递传递的是值的一个复本,引用传递传递的是值指向的内存地址
04
*/
05
// 函数的引用,定义时也要加上 &
06
function &func($a,$b){
07
// 这里为了更直观看到效果,定义一个静态变量
08
static $result = 0;
09
$result+=$a+$b;
10
echo $result.'
';
11
return $result;
12
}
13
14
$a =$b = 10;
15
// PHP里这样写函数的引用调用,和调用普通函数没有区别(只是将函数的返回值复制给$c这个变量,$c做任何改变不会影响上面函数中的$result)
16
// 要记住:PHP里的函数引用定义及调用都要在函数名前加上 &
17
$c = func($a,$b);
18
// 第一次执行func(),其静态变量$result的值变为 20(10+10)
19
// 改变$c的值,不会对下面一行语句产生影响
20
$c = 666;
21
// 第二次执行func(),其静态变量$result的值变为 40(20+10+10)
22
$c = func($a,$b);
23
echo '
';
24
// 这样才是PHP中引用函数的调用方式
25
$d = &func($a,$b);
26
// 第三次执行func(),其静态变量$result的值变为 40(40+10+10)
27
$d = 888;
28
// 第四次执行func(),其静态变量$result的值变为 908(888+10+10)
29
$d = func($a,$b);
30
?>
转自:http://www.php-z.com/article-3402-1.html