ホームページ >バックエンド開発 >PHPチュートリアル >PHP の参照された foreach ループが予期しない動作を示すのはなぜですか?

PHP の参照された foreach ループが予期しない動作を示すのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-13 12:57:10987ブラウズ

Why Does PHP's Referenced Foreach Loop Exhibit Unexpected Behavior?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。