手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用
当你想将函数的返回引用绑定到某个变量时,PHP允许你这么做:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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
|
可见,想让函数返回引用,必须在函数申明和赋值时都带上&操作符.
对于类中方法也是如此:
?
1
2
3
4
5
6
7
8
9
10
11
12
|
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 ;
|
一些简单的例子
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?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 的值。
所以在执行了
?
1
2
3
|
$a = &test();
$a = 5;
|
以后,$b的值变为了5。
再来个程序例子加深理解:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?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 );
?>
|
相关文章
猜你喜欢
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-29 80
-
2025-05-27 40
-
2025-06-04 14
-
2025-06-04 34
-
2025-05-29 29
热门评论