Menu
Coddy logo textTech

参照渡し

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 変数への直接的なリンクを作成するため、関数がそれを直接変更できるようになります。

この手法は、関数で複数の変数を変更する必要がある場合や、コピーが非効率になるような大規模なデータ構造を扱う場合に特に便利です。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

challenge icon

チャレンジ

簡単

updateInventory という名前の関数を作成してください。この関数は、数量変数への参照、追加する量、および削除する量の3つのパラメータを受け取ります。この関数は、最初の量を追加し、2番目の量を差し引くことで、元の数量を変更する必要があります。

3つの入力を受け取ります:初期数量、追加する量、および削除する量です。これら3つの入力をすべて読み取り、初期数量で変数を作成し、数量を参照渡しで追加量および削除量とともに updateInventory 関数を呼び出し、更新された数量を出力してください。

入力形式: 3行 - 1行目に初期数量(数値)、2行目に追加する量(数値)、3行目に削除する量(数値)が含まれます。

期待される出力: 追加および削除した後の更新された数量

チートシート

デフォルトでは、PHPは変数を値(コピー)として関数に渡します。元の変数を変更するには、パラメータ名の前にアンパサンド(&)を付けることで、参照渡しを使用します:

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

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

&$numberパラメータは元の変数への直接的なリンクを作成し、関数が値を返さずに変数を変更できるようにします。これは、複数の変数を変更したり、大規模なデータ構造を効率的に操作したりする場合に便利です。

自分で試してみよう

<?php
// 入力を読み込む
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));

// 数量の変数を作成する
$quantity = $initialQuantity;

// TODO: ここに参照渡しを引数に取る updateInventory 関数を作成する

// TODO: 参照渡しで quantity を指定して updateInventory 関数を呼び出す

// 更新された数量を出力する
echo $quantity;
?>
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン