ゆるく働き ゆるく生きる ゆるいだれかの日記

menu

ゆるりの足あと


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


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

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

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

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

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

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

PHPマニュアルによると

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

ということらしいです。

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

少しはお役に立てましたか?

役に立つかも?と思われた方はぜひシェアを!

関連記事

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

過去に作成したサイト集