嗯,我知道什么是参考文献,什么时候使用它是显而易见的。
我真正无法得到的一点是,通过引用传递函数会更好。
<?php
//right here, I wonder why and when
function &test(){
}
为了避免混淆,我可以通过一些例子来理解参考文献,
<?php
$numbers = array(2,3,4);
foreach ($numbers as &$number){
$number = $number * 2;
}
// now numbers is $numbers = array(4,6,8);
$var = 'test';
$foo = &var; //now all changes to $foo will be affected to $var, because we've assigned simple pointer
//Similar to array_push()
function add_key(&$array, $key){
return $array[$key];
}
//so we don't need to assign returned value from this function
//we just call this one
$array = array('a', 'b');
add_key($array,'c');
//now $array is ('a', 'b', 'c');
使用引用的所有好处对我来说都是显而易见的,除了使用“通过引用传递函数”,
问题:何时通过引用传递函数(我在这里搜索了答案,但仍然无法掌握这个) 谢谢
答案 0 :(得分:3)
这是一个returns by reference函数 - “通过引用传递函数”这个术语有点误导:
function &test(){
return /* something */;
}
用例与普通引用几乎相同,也就是说不常见。对于(人为的)示例,请考虑在数组中查找元素的函数:
$arr = array(
array('name' => 'John', 'age' => 20),
array('name' => 'Mary', 'age' => 30),
);
function &findPerson(&$list, $name) {
foreach ($list as &$person) {
if ($person['name'] == $name) {
return $person;
}
}
return null;
}
$john = &findPerson($arr, 'John');
$john['age'] = 21;
print_r($arr); // changing $john produces a visible change here
在上面的示例中,您已经封装了在可以重用的函数中搜索数据结构中的项目(实际上可能比此数组复杂得多)的代码。如果您打算使用返回值来修改原始结构本身,除了从函数返回引用之外别无选择(在此特定情况下,您也可以将索引返回到数组中,但请考虑没有索引的结构,例如图表)。
答案 1 :(得分:1)
您的意思是Returning References吗?
一个简单的例子是:
function &test(&$a){
return $a;
}
$a = 10;
$b = &test($a);
$b++;
// here $a became 11
var_dump($a);