コードをアップロードします
$arr = array( 'a'=> 'a11', 'b'=> 'b22', 'c'=> 'c33',); foreach ($arr as $k=>&$v){ // Do somethind}foreach ($arr as $k=>$v){ var_dump($v);}
このコードで、var_dump は何を出力しますか? 試してみてください、答えは
string(3) "a11"string(3) "b22"string(3) "b22"
問題は、3 行目が key='b' の値になります。最初の循環参照。
今日私はそのような落とし穴に足を踏み入れましたが、問題を確認するのに長い時間がかかりました。簡単に言うと、foreach ループで使用された参照は、ループが終了した後も保持されます。
$value の参照と最後の配列要素は、 unset() によって破棄することをお勧めします
上の例では、最初のループが終了した後も、$v 参照がまだ存在します。 2 つの理由により、2 つのループの変数は同じ名前になります。2 番目のループの開始時には、$v には、終了するまで常に値が割り当てられます。
原理は非常にシンプルで、ドキュメントは明確に書かれていますが、作業中に関連するバグに遭遇した場合、それを見つけるのは非常に難しく、コードを記述する必要がある場合には注意してください。 to:
1. 参照の使用を減らす
2. 前に参照を使用する必要がある場合は、カプセル化されます