PHPにおけるループと参照の落とし穴

WBOY
リリース: 2016-06-23 13:17:16
オリジナル
843 人が閲覧しました

コードをアップロードします

$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. 前に参照を使用する必要がある場合は、カプセル化されます

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