php函数返回引用作用,php函数引用返回的详解

函数引用与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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值