リファレンス渡しについてはある程度理解があるという認識でよろしいでしょうか?
順番に
$dummy0 = &$arg[0];
$dummy1 = &$arg[1];
$arg[0]は元の値0を引き継ぎながら$dummy0と同じオブジェクトになります。
($arg[1]も同様)
$dst = $arg;
$dst[0]と$dst[1]は$argの属性を継承して、$dst[0]は$dummy0、$dst[1]は$dummy1になります。
$dst[0] = 10;
$dst[1] = 11;
$dst[0]は$arg[0]と同じなので、$dst[0]への変更は$arg[0]に反映します
($dst[1]も同様)
$dst[2] = 12;
$dst[3] = 13;
$dst[2]、$dst[3]は$argと相関関係がありませんので、変更しても$argには影響しません
具体的な見分け方はこう
PHP
1function foo($arg) {
2 $dummy0 = &$arg[0];
3 $dummy1 = &$arg[1];
4 var_dump($arg);
5 $dst = $arg;
6 var_dump($dst);
7 $dst[0] = 10;
8 $dst[1] = 11;
9 $dst[2] = 12;
10 $dst[3] = 13;
11 print_r($arg);
12}
13$src = array(0,1,2,3);
14foo($src);
リファレンス渡しになっている要素には「&」がついています
たとえば途中で$dummy0を変更しても、$arg[0]は変更します
ただし一度unsetすると関係ははずれます。
PHP
1function foo($arg) {
2 $dummy0 = &$arg[0];
3 $dummy1 = &$arg[1];
4 $dst = $arg;
5 $dst[0] = 10;
6 $dst[1] = 11;
7 $dst[2] = 12;
8 $dst[3] = 13;
9 $dummy0 = 100;
10 unset($dummy0);
11 $dummy0 = 1000;
12 print_r($arg);
13}
14
15$src = array(0,1,2,3);
16foo($src);
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/23 12:12