Menu
Coddy logo textTech

参照渡し

CoddyのPHPジャーニー「論理とフロー」セクションの一部。レッスン 7/68。

デフォルトでは、PHPでvariableを関数に渡すと、その関数はそのvariableの値のコピーを受け取ります。つまり、関数内で行われた変更は、関数の外にある元のvariableには影響しません。

ただし、function に元の variable を直接変更させたい場合もあります。ここで参照渡しが登場します。function の定義で parameter 名の前にアンパサンド(&)を追加すると、コピーではなく実際の variable を渡すよう PHP に指示できます。

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

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

$value が 10 から 20 に変わったことに注目してください。関数から何も返していないにもかかわらずです。&$number パラメータは、元の $value 変数への直接的なリンクを作成し、関数がそれを直接変更できるようにします。

このテクニックは、functionで複数のvariableを変更する必要がある場合や、コピーすると非効率になる大規模なデータ構造を扱う場合に特に役立ちます。

challenge icon

チャレンジ

簡単

updateInventoryという名前のfunctionをCreateし、3つのparameterをtakesようにしてください。quantity variableへのreference、addするamount、removeするamountです。このfunctionは、最初のamountを加算し、2番目のamountを減算して、元のquantityを変更する必要があります。

3つのinputs、initial quantity、addするamount、removeするamountが与えられます。3つすべてのinputsをReadし、initial quantityでvariableをCreateし、quantityをreferenceとしてaddとremoveのamountとともにupdateInventory functionをCallし、updated quantityを出力してください。

Input format: 3行 — 1行目にはinitial quantity(number)、2行目にはaddするamount(number)、3行目にはremoveするamount(number)が含まれます

Expected output: addとremoveの後のupdated quantity

自分で試してみよう

<?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オンラインコンパイラ