PHP返回引用

时间:2009-10-05 14:16:55

标签: php return-by-reference

  

通过引用返回时非常有用   你想用一个函数来找到   引用应该是哪个变量   约束即可。不要使用按引用返回   提高性能。引擎   将自动优化此功能   它自己的。仅在返回时引用   你有一个有效的技术理由   这样做。

粗体是什么意思?

它是指

之类的东西
public function &getHellos() {
    $sql = 'SELECT id, greeting FROM #__hello';
    $data = $this->_getList($sql);
    return $data;
}

我不绑定任何变量?

4 个答案:

答案 0 :(得分:4)

当我们希望函数GetRef()决定哪个变量$foo$bar,参考$foo_or_bar应该绑定时,我们通过引用返回:

$foo = "foo";
$bar = "bar";
function &GetRef(){
    global $foo, $bar;
    if(rand(0, 1) === 1){
        return $foo;
    }else{
        return $bar;
    }
}
$foo_or_bar =& GetRef();
$foo_or_bar = 'some other value';

var_dump($foo); // either one of this will be 'some other value'
var_dump($bar); // either one of this will be 'some other value'

Derick Ethans在"References in PHP: An In-Depth Look"中详细阐述了这一点:

  

这个[通过引用返回]很有用,例如,如果你愿意的话   使用函数选择要修改的变量,例如选择   数组元素或树结构中的节点。

示例代码演示通过引用返回选择数组元素:

function &SelectArrayElement(&$array, $key){
    return $array[$key];
}

$array = array(0, 1, 2);
$element =& SelectArrayElement($array, 0);
$element = 10;
var_dump($array); // array(10, 1, 2)

答案 1 :(得分:2)

钠。您无法传递对函数名称的引用。 通过引用传递变量时,如果在函数中更改它的值,它的值也将在函数外部更改。

例如:

function test(&$var) {
    $var = strtolower($var);
}

function second_test($var) {
    $var = strtolower($var);
}

$var = 'PHP';

second_test($var);
echo $var;

echo "\r\n";

test($var);
echo $var;

这将显示:

PHP
php

由于second_test方法没有通过引用传递的变量,因此更新后的值仅在函数内部更新。 但测试方法作为变量通过引用传递。所以它的值将在这个函数的内部和外部更新。

答案 2 :(得分:0)

我认为它指的是byref 参数而不是函数。例如:

function doStuff(&$value1, &$value2) {
    ...
}

是byref的可接受用法,因为doStuff()函数必须返回2个值。如果只有doStuff()只需要影响一个值,那么当函数按值返回它会更优雅。

答案 3 :(得分:0)

粗体部分意味着如果你想保留对变量的引用而不是这个变量的值,它会很有用。

关于returning references的例子,在php.net上,很好地解释了,IMO。