Inhaltsverzeichnis
php的循环与引用的一个坑,php循环引用
Heim 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>
Nach dem Login kopieren

这样的代码, var_dump 会输出什么? 各位可以试试, 答案

<span>string</span>(3) "a11"
<span>string</span>(3) "b22"
<span>string</span>(3) "b22"
Nach dem Login kopieren

结果里, 第三行变成了 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使用引用,  应该用函数将封装起来

 

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist in der C-Sprache der Unterschied zwischen while(1) und while(0)? Was ist in der C-Sprache der Unterschied zwischen while(1) und while(0)? Aug 31, 2023 am 10:45 AM

Wir wissen, dass in der C-Sprache das Schlüsselwort „while“ verwendet wird, um eine Schleife zu definieren, die auf der Grundlage der an die Schleife übergebenen Bedingung funktioniert. Da die Bedingung nun zwei Werte haben kann, wahr oder falsch, wird der Code im while-Block wiederholt ausgeführt, wenn die Bedingung wahr ist, und nicht ausgeführt, wenn die Bedingung falsch ist. Durch die Übergabe von Parametern an die while-Schleife können wir nun zwischen while(1) und while(0) unterscheiden, da while(1) eine Schleife ist, in der die Bedingung immer als wahr gilt und der Code im Block daher wiederholt ausgeführt wird. Darüber hinaus können wir sagen, dass es nicht 1 ist, die an die Schleife übergeben wird, die die Bedingung wahr macht, sondern wenn eine beliebige Ganzzahl ungleich Null an die while-Schleife übergeben wird, wird sie als die wahre Bedingung betrachtet, also

Verwendung von while Verwendung von while Sep 25, 2023 am 09:47 AM

Die Verwendung von while ist „while-Bedingung: Codeblock“. Wenn die Bedingung wahr ist, wird der Codeblock ausgeführt, und dann wird erneut beurteilt, ob die Bedingung wahr ist Der Block wird so lange ausgeführt, bis die Bedingung falsch ist. while ist eine häufig verwendete Schleifenkontrollanweisung, mit der ein Codeblock wiederholt ausgeführt wird, wenn bestimmte Bedingungen erfüllt sind.

Ist while ein Schlüsselwort in der Go-Sprache? Ist while ein Schlüsselwort in der Go-Sprache? Jun 04, 2021 pm 05:01 PM

In der Go-Sprache ist while kein Schlüsselwort. Sie können die for-Anweisung plus break verwenden, um den Effekt einer while-Schleife zu erzielen, z. B. „for {sum++ if sum>10{break}else{...}}“. Die Go-Sprache verfügt über 25 Schlüsselwörter wie break, default, func, select, case, defer, go, map, else, goto, for, if, var usw.

Was sind die gängigen Flusskontrollstrukturen in Python? Was sind die gängigen Flusskontrollstrukturen in Python? Jan 20, 2024 am 08:17 AM

Was sind die gängigen Flusskontrollstrukturen in Python? In Python ist die Flusskontrollstruktur ein wichtiges Werkzeug zur Bestimmung der Ausführungsreihenfolge des Programms. Sie ermöglichen es uns, verschiedene Codeblöcke basierend auf unterschiedlichen Bedingungen auszuführen oder einen Codeblock wiederholt auszuführen. Im Folgenden werden gängige Prozesssteuerungsstrukturen in Python vorgestellt und entsprechende Codebeispiele bereitgestellt. Bedingte Anweisungen (if-else): Bedingte Anweisungen ermöglichen es uns, verschiedene Codeblöcke basierend auf unterschiedlichen Bedingungen auszuführen. Die grundlegende Syntax lautet: if Bedingung 1: #when Bedingung

So verwenden Sie die while-Anweisung in Java So verwenden Sie die while-Anweisung in Java Apr 19, 2023 am 09:28 AM

Hinweis 1. Die chinesische Bedeutung des Schlüsselworts while ist when..., das heißt, wenn die Bedingung erfüllt ist, wird der entsprechende Code in einer Schleife ausgeführt. Die while-Anweisung ist die Grundstruktur der Schleifenanweisung und das Syntaxformat ist relativ einfach. Ausführungsprozess 2. Bestimmen Sie beim Ausführen einer while-Anweisung zunächst die Schleifenbedingung. Wenn die Schleifenbedingung falsch ist, wird der nachfolgende Code der while-Anweisung direkt ausgeführt. Wenn die Schleifenbedingung wahr ist, wird der Schleifenkörpercode ausgeführt Die Bedingung wird so lange bestimmt, bis die Schleifenbedingung nicht mehr erfüllt ist. Beispiel inti=1;intsum=0;while(i

Detaillierte Erläuterung der Funktion und Verwendung des Schlüsselworts break in PHP Detaillierte Erläuterung der Funktion und Verwendung des Schlüsselworts break in PHP Jun 28, 2023 pm 06:39 PM

Ausführliche Erläuterung der Rolle und Verwendung des Schlüsselworts „break“ in PHP. In der PHP-Programmierung ist „break“ eine Kontrollflussanweisung, die verwendet wird, um die aktuelle Schleife oder Switch-Anweisung zu unterbrechen und aus der Schleife oder dem Switch zu springen. In diesem Artikel werden die Rolle und Verwendung des Schlüsselworts break im Detail vorgestellt. 1. Unterbrechung einer Schleife In einer Schleifenstruktur besteht die Funktion von Unterbrechung darin, die Schleife vorzeitig zu beenden und aus dem Schleifenkörper zu springen, um den Code nach der Schleife auszuführen. Zu den gängigen Schleifenstrukturen gehören for, while und do...while. in der for-Schleife

Ausführliche Erklärung der PHP While-Schleife: Umfassende Beherrschung der Schleifenprinzipien und Anwendungsszenarien Ausführliche Erklärung der PHP While-Schleife: Umfassende Beherrschung der Schleifenprinzipien und Anwendungsszenarien Apr 09, 2024 pm 03:27 PM

While-Schleife ist eine Kontrollflussstruktur, mit der Anweisungen wiederholt ausgeführt werden, bis eine Bedingung falsch ist. Das Prinzip besteht darin, die Bedingung zu überprüfen. Wenn sie wahr ist, wird der Schleifenkörper ausgeführt und dann die Bedingung überprüft, bis die Bedingung falsch ist. Es eignet sich für Situationen, in denen eine Operation wiederholt ausgeführt werden muss, eine Operation ausgeführt werden muss, wenn eine Bedingung wahr ist, oder eine Schleife basierend auf einer Bedingung übersprungen werden muss. Zu den praktischen Beispielen gehören das Drucken gerader Zahlen, das Berechnen von Primzahlen und die Verwendung der break-Anweisung zum Ausbrechen von Schleifen.

So verwenden Sie While-Schleifenanweisungen zum Verarbeiten wichtiger Links in Java So verwenden Sie While-Schleifenanweisungen zum Verarbeiten wichtiger Links in Java Apr 25, 2023 am 10:26 AM

Java verwendet publicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(connectionToHandle)).start();}publicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(connectionToHandle)).start();} und verwendet RemoteFileSer

See all articles