php中的引用返回通常用在两个地方函数或者类的方法中。使用的时候需要有两个 &, 一个是在函数定义或者类的方法定义的时候,函数名或者类的方法名前加 & , 二地方是 执行这个函数或者方法的是前面也应该有&
。
使用方法
- 记得添加两个
&
- 函数或者类的方法应该返回一个变量 比如 return $arr[$x]。
- 函数或者类的方法的执行结果赋值给一个变量比如 $ans = &fun(x)。
这样对$ans 的操作相当于对 $arr[$x]
的操作
php返回引用有什么用 | 修改函数内部的静态变量
// 一个比较复杂的操作
function op($x) {
return $x * $x;
}
function &foo($x) {
static $arr = array();
if(!isset($arr[$x])) {
$arr[$x] = op($x);
}
return $arr[$x];
}
# 重点 $ans 是 foo(100) 的一个引用, 而 foo(100) 的返回是 $arr[100] 。 所以 对 $ans 的操作会反应在 $arr[100] 中
$ans = &foo(100);
echo 'foo(100) == ' . foo(100) . PHP_EOL;
# 重要的执行语句 $ans = 100 , 就相当于操作 $arr[100] = 100 的结果
$ans = 100;
echo 'run $ans = 100' . PHP_EOL;
echo 'foo(100) == ' . foo(100) . PHP_EOL;
### 输出的结果
foo(100) == 10000
run $ans = 100
foo(100) == 100
这段代码的含义, 本来 函数foo打算通过 静态变量 $arr 来缓存一些结果,加快程序的运行。比如执行一个 foo(100) 后,再次执行 foo(100) 就不会运行复制的op操作。直接给出结果
现在有个需求想 调整一下输出的结果。这个时候, 引用返回就发挥作用了。
官方的示例
<?php
class foo {
public $value = 42;
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; // prints the new value of $obj->value, i.e. 2.
?>