ホームページ > バックエンド開発 > PHPチュートリアル > 参照渡しを使用すると、PHP の「foreach」ループで予期しない結果が生じるのはなぜですか?

参照渡しを使用すると、PHP の「foreach」ループで予期しない結果が生じるのはなぜですか?

Linda Hamilton
リリース: 2024-12-25 00:01:11
オリジナル
234 人が閲覧しました

Why Does My PHP `foreach` Loop Produce Unexpected Results When Using Pass-by-Reference?

foreach での参照による受け渡し: 予期しない動作を理解する

PHP の foreach ループは配列内の各要素を反復処理しますが、場合によっては、その出力は驚くべきものになる可能性があります。次のコードを考えてみましょう:

$a = ['zero', 'one', 'two', 'three'];

foreach ($a as &$v) {

}

foreach ($a as $v) {
  echo $v . PHP_EOL;
}
ログイン後にコピー

期待どおり、出力は 'zero'、'one'、'two'、および 'three' になるはずです。ただし、このコードを実行すると、代わりに 'zero'、'one'、'two'、'two' が返されます。

この予期しない動作は、PHP の参照による変数の概念に起因します。最初の foreach ループでは、参照演算子「&」を使用して、$a 配列内の各要素への参照変数 ($v) を作成します。これは、$v に加えられた変更は、$a の対応する要素にも影響することを意味します。

最初は、$a のすべての要素は通常の変数です。ただし、最初のループの後は、$a[3] だけが参照変数として残ります。これは、配列の反復処理中に、前の参照変数 ($v) が新しい要素ごとに上書きされるためです。

2 番目のループで、$v をエコーすると、$a[3] を指します。これは、前の反復で「2」に設定されました。したがって、最後の反復では「three」の代わりに「two」がエコーされます。

通常の変数と参照変数の違い、およびそれらが foreach ループ内でどのように相互作用するかを理解することで、このような予期しない動作を回避し、コードが意図したとおりに動作することを確認してください。

以上が参照渡しを使用すると、PHP の「foreach」ループで予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート