目次
php的循环与引用的一个坑,php循环引用
ホームページ php教程 php手册 php的循环与引用的一个坑,php循环引用

php的循环与引用的一个坑,php循环引用

Jun 13, 2016 am 08:46 AM
while

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使用引用,  应该用函数将封装起来

 

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

C言語では、while(1)とwhile(0)の違いは何ですか? C言語では、while(1)とwhile(0)の違いは何ですか? Aug 31, 2023 am 10:45 AM

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

whileの使い方 whileの使い方 Sep 25, 2023 am 09:47 AM

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

go 言語のキーワードは while ですか? go 言語のキーワードは while ですか? Jun 04, 2021 pm 05:01 PM

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 の一般的なフロー制御構造は何ですか? Jan 20, 2024 am 08:17 AM

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

Javaでwhile文を使用する方法 Javaでwhile文を使用する方法 Apr 19, 2023 am 09:28 AM

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

PHPのbreakキーワードの機能と使い方を詳しく解説 PHPのbreakキーワードの機能と使い方を詳しく解説 Jun 28, 2023 pm 06:39 PM

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

PHP While ループの詳細な説明: ループ原理とアプリケーション シナリオを包括的に習得します。 PHP While ループの詳細な説明: ループ原理とアプリケーション シナリオを包括的に習得します。 Apr 09, 2024 pm 03:27 PM

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

Java で while ループ ステートメントを使用して主要なリンクを処理する方法 Java で while ループ ステートメントを使用して主要なリンクを処理する方法 Apr 25, 2023 am 10:26 AM

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

See all articles