ホームページ > バックエンド開発 > PHPチュートリアル > PHPのforeachループで&forキー値を使用する問題

PHPのforeachループで&forキー値を使用する問題

WBOY
リリース: 2016-08-04 09:19:49
オリジナル
1319 人が閲覧しました

コードは次のとおりです:

リーリー

最終的な出力結果は次のとおりです:

リーリー

質問: アドレス文字が最後のキー値の前に表示されるのはなぜですか?

返信内容:

コードは次のとおりです:

リーリー

最終的な出力結果は次のとおりです:

リーリー

質問: アドレス文字が最後のキー値の前に表示されるのはなぜですか?

この var_dump に表示される & は、別の変数を使用してその値を変更できることを意味します。
あなたと同じように

リーリー

ここで印刷すると、最初のキー値に & 記号が表示され、他の変数 ($b) を使用してその値を変更できることを示します。

まずは&の基本的な使い方を理解しましょう。

リーリー

上記で $a を $b への参照として指定した後、別の参照または unset($a) として再度指定しない限り、$a を変更すると、対応する $b の値が変更されます。

foreach にも同じことが当てはまります。ループを 1 つのステップに分割すると、次のようになります。 リーリー

ループが最後まで実行されると、$value は $a[2] への参照になるため、次の形式と同等になります:

リーリー

var_dump が最後のキーと値のペアに & 記号を出力する理由を理解するのは難しくありません。


通常であれば大きな問題は発生しませんが、foreachのスコープの問題により、ループ終了後も$valueが使用できるため、信じられないようなバグが発生します。

こんな感じ

リーリー

空の foreach を追加した後、$a が理不尽になるのは、空の foreach 内の $value が先頭の &a[2] への参照であるためです。

空の foreach は次と同等です:

リーリー

$value は $a[2] への参照であるため、上記は次のように書き換えることができることに気づきましたか:

リーリー

空の foreach は $a[2] を常に変更しており、$a[2] は $a[1] の値になっているため、$a[2] = $a[2]; の値は効果がありません。まだ $a[1] です;

この驚くべきバグは、$value 変数のスコープによって引き起こされるため、最初に名前を変更するか、$value の設定を解除してください。

リーリー

まず最初に、これは

とてもとても良い質問だと言いたいです。質問者さんは引用と非引用の区別ができないわけではないと思います。 最初に 2 つのテストを行いました:
リーリー

出力は何だと思いますか?

リーリー

別のテストは次のとおりです:

リーリー

今回の出力はより正常に見えます:

リーリー

つまり、この問題は PHP グローバル変数の落とし穴であるはずです。

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