php的循环与引用的一个坑,php循环引用
php的循环与引用的一个坑,php循环引用
上代码
<span>$arr</span> = <span>array</span><span>( </span>'a'=> 'a11', 'b'=> 'b22', 'c'=> 'c33',<span> ); </span><span>foreach</span> (<span>$arr</span> <span>as</span> <span>$k</span>=>&<span>$v</span><span>){ </span><span>//</span><span> Do somethind</span> <span>} </span><span>foreach</span> (<span>$arr</span> <span>as</span> <span>$k</span>=><span>$v</span><span>){ </span><span>var_dump</span>(<span>$v</span><span>); }</span>
这样的代码, var_dump 会输出什么? 各位可以试试, 答案
<span>string</span>(3) "a11" <span>string</span>(3) "b22" <span>string</span>(3) "b22"
结果里, 第三行变成了 key='b' 的value. 问题就出在第一个循环的引用.
今天就踩到了一个这样的坑, 查问题用了很久. 简单来说, foreach循环使用的引用, 循环结束后有所保留. php.net 着重写了:
Warning
Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().
对于上面这个例子, 第一个循环结束后, $v引用仍然存在. 由于两个循环的变量命名一致, 第二个循环开始, $v 每次都会被赋值. 直到最后, $v 被设置成了
前一个元素的值.
原理很简单, 文档写的明明白白. 但如果工作中遇到相关的bug是很坑的, 定位需要很久. 还得需要写码的时候就注意:
1. 减少引用的使用
2. 如果需要在foreah使用引用, 应该用函数将封装起来

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C 言語では、ループに渡された条件に基づいて動作するループを定義するために「while」キーワードが使用されることがわかっています。ここで、条件には true または false の 2 つの値を指定できるため、while ブロック内のコードは、条件が true の場合は繰り返し実行され、条件が false の場合は実行されません。さて、while ループにパラメータを渡すことで、while(1) と while(0) を区別できるようになります。while(1) は条件が常に true とみなされ、ブロック内のコードが繰り返し実行を開始するループであるためです。さらに、条件を true にするループに渡されるのは 1 ではないと言えますが、ゼロ以外の整数が while ループに渡された場合、それは true 条件とみなされます。

while の使い方は「while 条件: コードブロック」です。条件は式です。条件が true の場合、コードブロックが実行され、条件が true であるかどうかが再度判定されます。true であれば、コードが実行されます。ブロックは条件が false になるまで実行され続けます。 while は一般的に使用されるループ制御ステートメントであり、特定の条件が満たされた場合にコードのブロックを繰り返し実行するために使用されます。

Go 言語では、while はキーワードではありません。for ステートメントと Break を使用すると、「for {sum++ if sum>10{break}else{...}}」など、while ループの効果を得ることができます。 go 言語には、break、default、func、select、case、defer、go、map、else、goto、for、if、var など 25 のキーワードがあります。

Python の一般的なフロー制御構造は何ですか? Python では、フロー制御構造はプログラムの実行順序を決定するために使用される重要なツールです。これらを使用すると、さまざまな条件に基づいてさまざまなコード ブロックを実行したり、コード ブロックを繰り返し実行したりできます。以下では、Python の一般的なプロセス制御構造を紹介し、対応するコード例を示します。条件ステートメント (if-else): 条件ステートメントを使用すると、さまざまな条件に基づいてさまざまなコード ブロックを実行できます。基本的な構文は次のとおりです: if 条件 1: #when 条件

注 1. while キーワードの中国語の意味は「When...」、つまり、条件が成立すると、対応するコードがループで実行されます。 while 文はループ文の基本的な構造であり、構文形式は比較的単純です。実行処理2. while文を実行する場合は、まずループ条件を決定します ループ条件が偽の場合は、while文の後続コードを直接実行します ループ条件が真の場合は、ループ本体のコードを実行し、ループを実行しますループ条件が成立しないまで条件を判定します。例 inti=1;intsum=0;while(i

PHP における Break キーワードの役割と使用法の詳細な説明 PHP プログラミングでは、break は現在のループまたは switch ステートメントを中断し、ループまたは switch から飛び出すために使用される制御フロー ステートメントです。この記事ではbreakキーワードの役割と使い方を詳しく紹介します。 1. ループ内のブレーク ループ構造におけるブレークの機能は、ループを早期に終了し、ループ本体から飛び出して、ループ後のコードを実行することです。一般的なループ構造には、for、while、do...while などがあります。 forループ内で

While ループは、条件が false になるまでステートメントを繰り返し実行するために使用される制御フロー構造です。原理は、条件をチェックし、それが true の場合はループ本体を実行し、条件が false になるまで条件をチェックすることです。演算を繰り返し実行する必要がある場合、条件が真の場合に演算を実行する必要がある場合、または条件に基づいてループを抜け出す必要がある場合に適しています。実際の例には、偶数の出力、素数の計算、ループから抜け出すための Break ステートメントの使用などが含まれます。

Java代コードpublicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(connectionToHandle)).start();}publicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(connectionToHandle)).start();}我们对RemoteFileSer
