【PHP】バグ?foreach($arr as &$item)←この&をつけると起きる変な挙動に注意!

foreach($arr as &$item){
//ループ
}

PHPには、&をつけた状態でforeachループを回すと$itemが上書きできる便利な機能があります。

ですが、unset();を実行するのを忘れるとひどい目にあいます。

配列の最後だけおかしな値(こと)になるとすれば、原因はコレかもしれません。

こんな不思議な現象が起こってしまいます。PHPの困った仕様の一つです。

勝手に配列の一部が変わってしまうなんて、初めて遭遇した方はとても戸惑われるのではないでしょうか。

PHPマニュアルによると

PHP 5 以降、$value の前に & を付けることで、 容易に配列の要素の値を変更できるようになっています。 これにより、値をコピーするのではなく、 リファレンス が代入されます。
[略]
警告
foreach ループを終えた後でも、 $value は配列の最後の要素を参照したままとなります。 unset() でその参照を解除しておくようにしましょう。

ということらしいです。

ポインタとして使った変数を必ずunset();する必要があるので、foreachを使うときは十分注意してくださいね。

コメント

お知らせ

羽織紐を手作りしてます!よろしければご覧ください!
  • 天然石 マグネット式羽織紐 #01 / 着物小物 / ブルーグリーン / 水晶
    天然石 マグネット式羽織紐 #01 / 着物小物 / ブルーグリーン / 水晶
  • 天然石 マグネット式羽織紐 #09 / 着物小物 / グレー / 高品質ルチルクォーツ
    天然石 マグネット式羽織紐 #09 / 着物小物 / グレー / 高品質ルチルクォーツ
  • 天然石 マグネット式羽織紐 #04 / 着物小物 / ネイビー
    天然石 マグネット式羽織紐 #04 / 着物小物 / ネイビー

お知らせ

羽織紐を手作りしてます!よろしければご覧ください!
  • 天然石 マグネット式羽織紐 #01 / 着物小物 / ブルーグリーン / 水晶
    天然石 マグネット式羽織紐 #01 / 着物小物 / ブルーグリーン / 水晶
  • 天然石 マグネット式羽織紐 #09 / 着物小物 / グレー / 高品質ルチルクォーツ
    天然石 マグネット式羽織紐 #09 / 着物小物 / グレー / 高品質ルチルクォーツ
  • 天然石 マグネット式羽織紐 #04 / 着物小物 / ネイビー
    天然石 マグネット式羽織紐 #04 / 着物小物 / ネイビー
タイトルとURLをコピーしました