by shigemk2

当面は技術的なことしか書かない

ポインタとコピー

たとえばこんな関数を作ります。

$y = 0;
$m = 20;
pr($y);
pr($m);
function hoge($y, $m) {
  $y = 1;
  $m = 22;
}
hoge($y, $m);
pr($y);
pr($m);

結果はもちろんこうなります。

0
20
0
20

また、

$y = 0;
$m = 20;
pr($y);
pr($m);
function hoge($y, $m) {
  $y = 1;
  $m = 22;
}
hoge(&$y, &$m);
pr($y);
pr($m);

こちらは

0
20
1
22

関数を使用するときに引数はポインタを使うようにしており、
ポインタを使って変数のアドレスに直接アクセスしているから。
前者はデータのコピーを使っているので、スコープが限定されてしまう。

$y = 0;
$m = 20;
pr($y);
pr($m);
function hoge(&$y, &$m) {
  $y = 1;
  $m = 22;
}
hoge($y, $m);
pr($y);
pr($m);

こちらは

0
20
1
22

cとかだとここでエラーになるみたいです。c++やったことあるけど、忘れました。すみません。