エンジニアの卵_level5

【毎日更新!】エンジニアの卵のブログです!技術以外も書いたり。

【PHP】参照渡しと破壊的な関数とは。【103日目】

クイズ

swapは2つの値を入れ替える関数です。
swapを実行した後の$x,$yの値は?

例のプログラム

$x = 1;
$y = 2;

swap($x, $y);
echo $x;
echo $y;

swap2($x, $y);
echo $x;
echo $y;

function swap($a, $b)
{
  $temp = $a;
  $a = $b;
  $b = $temp;
}

function swap2(&$a, &$b)
{
  $temp = $a;
  $a = $b;
  $b = $temp;
}

実行結果

f:id:willow710kut:20180124224742g:plain

どういうこと?

swap($x, $y);は、
function swap($a, $b)の$aに$x(=1)、$bに$y(=2)の値をコピーしているだけ。

だから、関数を実行した後も$xと$yの数値が変わらない。

swap2($x, $y);は、
function swap2(&$a, &$b)に変数そのものを渡している。 &$aは$xになり、&$bは$yになる。

従って、$xと$yの値がswap2の後に入れ替わっている。

&$aのような書き方を『参照渡し』と言い、 実行後に変数が書き換わるような関数を『破壊的な関数』と言う。

日記

シンボルテーブルについての説明は省略。

gifを使ってみましたが、見やすいでしょうか。

良さそうならこんな感じの記事を増やしたいところ。