목차
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 기반 앱

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 Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 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' 키워드가 사용된다는 것을 알고 있습니다. 이제 조건은 true 또는 false 두 가지 값을 가질 수 있으므로 조건이 true이면 while 블록 내부의 코드가 반복적으로 실행되고 조건이 false이면 실행되지 않습니다. 이제 while 루프에 매개변수를 전달함으로써 while(1)과 while(0)을 구별할 수 있습니다. 왜냐하면 while(1)은 조건이 항상 참으로 간주되어 블록 내부의 코드가 반복적으로 실행되기 시작하는 루프이기 때문입니다. 또한 조건을 참으로 만드는 루프에 전달되는 것은 1이 아니지만 while 루프에 0이 아닌 정수가 전달되면 참 조건으로 간주됩니다.

동안의 사용법 동안의 사용법 Sep 25, 2023 am 09:47 AM

while의 사용법은 "while 조건: 코드 블록"입니다. 조건이 true이면 코드 블록이 실행되고, 조건이 true인지 다시 판단합니다. 조건이 false가 될 때까지 블록은 계속 실행됩니다. while은 일반적으로 사용되는 루프 제어문으로, 특정 조건이 충족될 때 코드 블록을 반복적으로 실행하는 데 사용됩니다.

while이 Go 언어의 키워드인가요? while이 Go 언어의 키워드인가요? Jun 04, 2021 pm 05:01 PM

Go 언어에서 while은 키워드가 아닙니다. "for {sum++ if sum>10{break}else{...}}"와 같이 for 문과 break를 함께 사용하면 while 루프의 효과를 얻을 수 있습니다. 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 키워드의 중국어 뜻은 when..., 즉 조건이 성립되면 해당 코드가 루프로 실행된다는 뜻입니다. while 문은 루프 문의 기본 구조이며 구문 형식은 비교적 간단합니다. 실행과정 2. while 문을 실행할 때 루프 조건을 먼저 판단하고, 루프 조건이 false이면 while 문의 후속 코드를 직접 실행하여 루프 본문 코드를 실행합니다. 루프 조건이 성립되지 않을 때까지 조건이 결정됩니다. 예 inti=1;intsum=0;while(i

Python의 일반적인 흐름 제어 구조는 무엇입니까? Python의 일반적인 흐름 제어 구조는 무엇입니까? Jan 20, 2024 am 08:17 AM

Python의 일반적인 흐름 제어 구조는 무엇입니까? Python에서 흐름 제어 구조는 프로그램의 실행 순서를 결정하는 데 사용되는 중요한 도구입니다. 이를 통해 다양한 조건에 따라 다양한 코드 블록을 실행하거나 코드 블록을 반복적으로 실행할 수 있습니다. 다음은 Python의 일반적인 프로세스 제어 구조를 소개하고 해당 코드 예제를 제공합니다. 조건문(if-else): 조건문을 사용하면 다양한 조건에 따라 다양한 코드 블록을 실행할 수 있습니다. 기본 구문은 다음과 같습니다. if 조건 1: #when 조건

PHP에서 break 키워드의 기능과 사용법에 대한 자세한 설명 PHP에서 break 키워드의 기능과 사용법에 대한 자세한 설명 Jun 28, 2023 pm 06:39 PM

PHP에서 break 키워드의 역할과 사용법에 대한 자세한 설명 PHP 프로그래밍에서 break는 현재 루프나 스위치 문을 중단하고 루프나 스위치에서 빠져나오는 데 사용되는 제어 흐름 명령문입니다. 이번 글에서는 break 키워드의 역할과 사용법을 자세히 소개하겠습니다. 1. 루프 중단 루프 구조에서 중단의 기능은 루프를 일찍 종료하고 루프 본문에서 점프하여 루프 이후의 코드를 실행하는 것입니다. 일반적인 루프 구조에는 for, while 및 do...while이 포함됩니다. for 루프에서

while 루프 문을 사용하여 Java에서 주요 링크를 처리하는 방법 while 루프 문을 사용하여 Java에서 주요 링크를 처리하는 방법 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은 반복을 구현하기 위한 반복자 및 생성기와 같은 도구를 제공합니다. 루프 대 반복: 유사점과 차이점 실행 메커니즘: 루프는 실행 흐름을 명시적으로 제어하는 ​​반면, 반복은 반복자 객체를 통해 암시적으로 수행됩니다. 상태 관리: 루프는 자체 상태(예: 카운터 또는 조건)를 유지하는 반면 반복기는 상태 관리를 캡슐화합니다. 사용 시나리오: 루프는 고정된 횟수만큼 반복되어야 하는 시간에 적합하거나

See all articles