Menu
CoddyTech

按引用传递

本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 7 课,共 68 课。

默认情况下,在 PHP 中将变量传递给函数时,函数会收到该变量值的副本。这意味着,在函数内部所做的任何更改都不会影响函数外部的原始变量。

不过,有时你希望函数直接修改原始变量。这时就需要按引用传递。在函数定义中的参数名前添加一个和号(&),就可以告诉 PHP 传递变量本身,而不是副本:

<?php
function doubleValue(&$number) {
    $number = $number * 2;
}

$value = 10;
doubleValue($value);
echo $value;  // 输出:20
?>

注意,尽管我们没有从函数中返回任何内容,$value 还是从 10 变成了 20。&$number 参数与原始的 $value 变量建立了直接连接,因此函数可以直接修改它。

当你需要让函数修改多个变量,或处理复制起来效率很低的大型数据结构时,这种技巧尤其有用。

challenge icon

挑战

简单

创建一个名为 updateInventory 的函数,它接收三个参数:一个数量变量的引用、要增加的数量和要减少的数量。该函数应通过加上第一个数量并减去第二个数量来修改原始数量。

你会收到三个输入:初始数量、要增加的数量和要减少的数量。读取这三个输入,创建一个值为初始数量的变量,调用 updateInventory 函数,并将数量作为引用传入,同时传入要增加和减少的数量,然后输出更新后的数量。

输入格式:三行:第一行包含初始数量(一个数字),第二行包含要增加的数量(一个数字),第三行包含要减少的数量(一个数字)

预期输出:增加和减少数量后的更新值

亲手试试

<?php
// 读取输入
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));

// 创建 quantity 变量
$quantity = $initialQuantity;

// TODO: 在这里创建接收引用参数的 updateInventory 函数

// TODO: 通过引用传入 quantity,调用 updateInventory 函数

// 输出更新后的 quantity
echo $quantity;
?>
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: PHP 在线编译器