目錄
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 Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

在C語言中,while(1)和while(0)之間的差異是什麼? 在C語言中,while(1)和while(0)之間的差異是什麼? Aug 31, 2023 am 10:45 AM

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

while的用法 while的用法 Sep 25, 2023 am 09:47 AM

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

go語言中while是關鍵字嗎 go語言中while是關鍵字嗎 Jun 04, 2021 pm 05:01 PM

在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關鍵字的作用和用法詳解 Jun 28, 2023 pm 06:39 PM

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

java的while語句怎麼使用 java的while語句怎麼使用 Apr 19, 2023 am 09:28 AM

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

Python中的常見流程控制結構有哪些? Python中的常見流程控制結構有哪些? Jan 20, 2024 am 08:17 AM

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

PHP While 迴圈詳解:全面掌握迴圈原理與應用場景 PHP While 迴圈詳解:全面掌握迴圈原理與應用場景 Apr 09, 2024 pm 03:27 PM

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

See all articles