foreachで参照渡しを使う場合はunsetするのを忘れずに!

広告

foreachの参照渡しを覚えてから結構頻繁に使っているのですが、思わぬところでバグを産んでしまったので、書いておきます。

広告

まずはサンプルから

  1. $data1に格納された各名前に「さん」を追記
  2. $data2に格納された各名前を出力
  3. $data1と$data2の配列の中身を確認

期待した結果

実際の結果

参照は続いている

原因は何故かわかっていただけたでしょうか。

$nameの参照は続いたままなので、$data2のforeachで$nameに値が代入される度に$data1で最後に参照渡しされた$data1[2]の値が書き換わってしまっていたのです。

当たり前と言われればそれまでなのですが、1時間以上はまりました。。

foreachで参照渡しを使った後はunsetすることをお忘れなく!

unsetすれば再度$nameを試用しても影響ありません。

foreachの参照をする時は念のためunsetしておきましょう!

広告

コメントをどうぞ

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">