gpt4 book ai didi

php - 通过引用传递函数

转载 作者:行者123 更新时间:2023-12-04 18:18:58 25 4
gpt4 key购买 nike

好吧,我知道什么是引用以及何时使用它是显而易见的。

我真正无法理解的一件事是,何时通过引用传递函数更好。

<?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');

使用引用的所有好处对我来说都是显而易见的,除了使用“通过引用传递函数”,

问题:何时通过引用传递函数(我在这里搜索过答案,但仍然无法掌握这个)
谢谢

最佳答案

这是 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

See it in action .

在上面的示例中,您已将在数据结构(实际上可能比此数组复杂得多)中搜索项目的代码封装在一个可重用的函数中。如果您打算使用返回值来修改原始结构本身,那么除了从函数返回引用之外别无选择(在这种特定情况下,您也可以返回数组的索引,但考虑没有索引的结构,例如图表)。

关于php - 通过引用传递函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11096189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com