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 Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

我們知道在C語言中,'while'關鍵字用於定義一個循環,該循環根據傳遞給循環的條件來運作。現在,由於條件可以有兩個值,即真或假,所以如果條件為真,則while區塊內的程式碼將重複執行,如果條件為假,則程式碼將不會執行。現在,透過將參數傳遞給while循環,我們可以區分while(1)和while(0),因為while(1)是一個條件始終被視為真的循環,因此區塊內的程式碼將開始重複執行。此外,我們可以說明,傳遞給循環並使條件為真的不是1,而是如果任何非零整數傳遞給while循環,則它將被視為真條件,因

while的用法是“while 條件: 程式碼區塊”,條件是一個表達式,當條件為真時,執行程式碼區塊,然後再次判斷條件是否為真,如果為真則繼續執行程式碼區塊,直到條件為假為止。 while是常用的迴圈控制語句,用來在滿足某個條件的情況下重複執行一段程式碼區塊。

在go語言中,while不是關鍵字,可以用for語句加break來實現while循環的效果,例「for {sum++ if sum>10{break}else{...}}」。 go語言有break、default 、func、select、case、defer、go、map、else、goto、for、if、var等25個關鍵字。

PHP中break關鍵字的作用和用法詳解在PHP編程中,break是一種控制流語句,用於中斷當前循環或switch語句,並跳出該循環或switch。本文將詳細介紹break關鍵字的作用與用法。一、循環中的break在循環結構中,break的作用是提前終止循環,跳出循環體執行循環後的程式碼。常見的循環結構有for、while和do...while。在for迴圈中

說明1、while關鍵字的中文意義是當…時,即條件成立時循環執行對應的代碼。 while語句是循環語句中的基本結構,語法格式比較簡單。執行過程2、執行while語句時,先判斷循環條件,循環條件為false時,直接執行while語句的後續程式碼,循環條件為true時,執行循環體程式碼,判斷循環條件,直到循環條件不成立為止。實例inti=1;intsum=0;while(i

Python中常見的流程控制結構有哪幾種?在Python中,流程控制結構是用來決定程式的執行順序的重要工具。它們允許我們根據不同的條件執行不同的程式碼區塊,或重複執行一段程式碼。以下將介紹Python中常見的流程控制結構,並提供對應的程式碼範例。條件語句(if-else):條件語句允許我們根據不同的條件執行不同的程式碼區塊。它的基本語法是:if條件1:#當條件

While迴圈是一種控制流結構,用來重複執行語句,直到條件為false。其原理是檢查條件,若為true,則執行循環體,再檢查條件,直至條件為false為止。它適用於需要重複執行操作、條件為true時需要執行操作或依條件跳出迴圈的情況。實戰案例包括列印偶數、計算質數和使用break語句跳出循環。

Java程式碼publicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(connectionToHandle)).start();}publicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(connectionToHandle)).start();}}我們對RemFileSer};
