目录
php的循环与引用的一个坑,php循环引用
首页 后端开发 php教程 php的循环与引用的一个坑,php循环引用_PHP教程

php的循环与引用的一个坑,php循环引用_PHP教程

Jul 12, 2016 am 08:59 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使用引用,  应该用函数将封装起来

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1098446.htmlTechArticlephp的循环与引用的一个坑,php循环引用 上代码 $arr = array ( 'a'= 'a11', 'b'= 'b22', 'c'= 'c33', ); foreach ( $arr as $k = $v ){ // Do somethind } foreach ( $arr as...
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系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.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 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个关键字。

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中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 25, 2023 am 10:26 AM

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

Python 循环与迭代:全面剖析其异同点 Python 循环与迭代:全面剖析其异同点 Feb 19, 2024 pm 02:54 PM

循环与迭代:概念解析循环是一种控制结构,它允许代码块重复执行指定的次数或直到满足特定条件。python提供了多种循环类型,包括for循环、while循环和do-while循环。另一方面,迭代是一个抽象概念,它表示按顺序遍历序列元素的过程。Python提供了迭代器和生成器等工具来实现迭代。循环vs.迭代:异同点执行机制:循环显式控制执行流程,而迭代是通过迭代器对象隐式执行的。状态管理:循环保持其自己的状态(如计数器或条件),而迭代器封装了状态管理。使用场景:循环适用于需要重复执行固定次数或直到满足

See all articles