クイズ
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; }
実行結果
どういうこと?
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を使ってみましたが、見やすいでしょうか。
良さそうならこんな感じの記事を増やしたいところ。