コードは次のとおりです:
リーリー最終的な出力結果は次のとおりです:
リーリー質問: アドレス文字が最後のキー値の前に表示されるのはなぜですか?
コードは次のとおりです:
リーリー最終的な出力結果は次のとおりです:
リーリー質問: アドレス文字が最後のキー値の前に表示されるのはなぜですか?
この var_dump に表示される & は、別の変数を使用してその値を変更できることを意味します。
あなたと同じように
ここで印刷すると、最初のキー値に & 記号が表示され、他の変数 ($b) を使用してその値を変更できることを示します。
まずは&
の基本的な使い方を理解しましょう。
上記で $a を $b への参照として指定した後、別の参照または unset($a) として再度指定しない限り、$a を変更すると、対応する $b の値が変更されます。
foreach にも同じことが当てはまります。ループを 1 つのステップに分割すると、次のようになります。 リーリー
ループが最後まで実行されると、$value は $a[2] への参照になるため、次の形式と同等になります:リーリー
var_dump が最後のキーと値のペアに & 記号を出力する理由を理解するのは難しくありません。
こんな感じ
リーリー
空の 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 グローバル変数の落とし穴であるはずです。