2

当您想使用函数查找应该将引用绑定到哪个变量时,按引用返回很有用。不要使用按引用返回来提高性能。引擎会自行自动优化。仅在您有正当的技术理由时才返回参考资料。

粗体字是什么意思?

它是指类似的东西吗

公共函数 &getHellos() {
    $sql = 'SELECT id, 从#__hello 打招呼';
    $data = $this->_getList($sql);
    返回$数据;
}

我没有绑定到任何变量?

4

4 回答 4

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)
于 2013-08-11T05:38:08.353 回答
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 方法没有通过引用传递变量,因此它的更新值仅在函数内部更新。但测试方法作为通过引用传递的变量。所以它的值将在这个函数的内部和外部更新。

于 2009-10-05T14:26:15.917 回答
0

我相信它指的是 byref参数而不是functions。例如这个:

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

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

于 2009-10-05T14:23:26.390 回答
0

粗体部分表示如果您想保留对变量的引用而不是该变量的值,它会很有用。

php.net 上关于返回引用的示例很好地解释了它,IMO。

于 2009-10-05T14:23:27.230 回答