[PHP-users 13916] Re: array_map関数に参照渡しの関数を適用するときの挙動について
Moriyoshi Koizumi
php-users@php.gr.jp
Wed, 12 Mar 2003 22:33:33 +0900
小泉です。
"N.Yoshioka" <noyo@pop16.odn.ne.jp> wrote:
> <?php
> function abc(&$aa) {
> $aa = 2;
> }
>
> $a = array(1,2,3,4,5);
> $b = $a;
> $c = $b;
> $d = $c;
>
> array_map("abc", $d);
> print_r($a);
> print_r($b);
> print_r($c);
> print_r($d);
> ?>
>
> 上記のようなソースを実行すると、配列 $a のコピーをとっているにもかかわらず、
> すべての変数が書き換えられてしまいます。($a $b $c $d すべて2になってしまう
> !)
array_map() の本来の利用法はご存知だとは思いますが、
$a = array(1,2,3,4,5);
$result = array_map('abc', $a);
こうですよね。
> 同様の関数のarray_walkを使用するとこの現象は起こりません。
> これはarray_map関数の仕様なのでしょうか?
> array_map関数に適用する関数は参照渡しを使用してはいけないのでしょうか?
うーん、バグなのかもしれませんが、前例を見る限り直される見込みはおそらく
ありません。本来の使い方から外れている動作は未定義ですから。
つまり、「参照渡しを使用してはいけない」ということです。