ホームページ >バックエンド開発 >PHPチュートリアル >PHP の参照された foreach ループが予期しない動作を示すのはなぜですか?
PHP の参照された Foreach ループの奇妙な動作を理解する
PHP では、foreach ループは配列またはオブジェクト内の要素を反復処理します。ただし、ループ内で参照を使用する場合 (例: foreach ($a as &$v) { ... })、予期しない動作が発生する可能性があります。
問題
次の PHP スクリプトについて考えてみましょう:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
Expected出力:
要素 'a'、'b'、'c'、および 'd' を含む配列。
実際の出力:
Array ( [0] => a [1] => b [2] => c [3] => c )
説明
予期しない動作これは、foreach ループ内で作成された参照がループ終了後も保持されるために発生します。具体的には、$a 配列の最後の要素が変数 $v によって参照されている可能性があります。
2 番目の foreach ループが実行されると、$v ($a の最後の要素への参照) に値が再割り当てされます。配列内の各要素の。 $v は $a の最後の要素への参照であるため、対応する配列要素が変更されます。
解決策
この動作を防ぐには、常に参照変数の設定を解除してください。 foreach ループの後完了:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
出力:
Array ( [0] => a [1] => b [2] => c [3] => d )
以上がPHP の参照された foreach ループが予期しない動作を示すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。