当您想使用函数查找应该将引用绑定到哪个变量时,按引用返回很有用。不要使用按引用返回来提高性能。引擎会自行自动优化。仅在您有正当的技术理由时才返回参考资料。
粗体字是什么意思?
它是指类似的东西吗
公共函数 &getHellos() { $sql = 'SELECT id, 从#__hello 打招呼'; $data = $this->_getList($sql); 返回$数据; }
我没有绑定到任何变量?
当您想使用函数查找应该将引用绑定到哪个变量时,按引用返回很有用。不要使用按引用返回来提高性能。引擎会自行自动优化。仅在您有正当的技术理由时才返回参考资料。
粗体字是什么意思?
它是指类似的东西吗
公共函数 &getHellos() { $sql = 'SELECT id, 从#__hello 打招呼'; $data = $this->_getList($sql); 返回$数据; }
我没有绑定到任何变量?
当我们希望函数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)
呐。您不能传递对函数名称的引用。通过引用传递变量时,如果您在函数中更改它的值,它的值也将在函数外部更改。
例如 :
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 方法没有通过引用传递变量,因此它的更新值仅在函数内部更新。但测试方法作为通过引用传递的变量。所以它的值将在这个函数的内部和外部更新。
我相信它指的是 byref参数而不是functions。例如这个:
function doStuff(&$value1, &$value2) {
...
}
是可接受的 byref 用法,因为 doStuff() 函数必须返回 2 个值。如果它只 doStuff() 只需要影响一个值,那么让函数按值返回它会更优雅,当然。
粗体部分表示如果您想保留对变量的引用而不是该变量的值,它会很有用。
php.net 上关于返回引用的示例很好地解释了它,IMO。