Jadual Kandungan
php的循环与引用的一个坑,php循环引用
Rumah 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>
Salin selepas log masuk

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

<span>string</span>(3) "a11"
<span>string</span>(3) "b22"
<span>string</span>(3) "b22"
Salin selepas log masuk

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

 

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Dalam bahasa C, apakah perbezaan antara while(1) dan while(0)? Dalam bahasa C, apakah perbezaan antara while(1) dan while(0)? Aug 31, 2023 am 10:45 AM

Kita tahu bahawa dalam bahasa C, kata kunci 'while' digunakan untuk mentakrifkan gelung yang berfungsi berdasarkan syarat yang dihantar ke gelung. Sekarang, memandangkan syarat boleh mempunyai dua nilai, benar atau salah, kod di dalam blok while akan dilaksanakan berulang kali jika syarat itu benar dan tidak akan dilaksanakan jika syarat itu palsu. Sekarang, dengan menghantar parameter kepada gelung while, kita boleh membezakan antara while(1) dan while(0) kerana while(1) ialah gelung di mana keadaan sentiasa dianggap benar dan oleh itu kod di dalam blok akan mula dilaksanakan berulang kali. Tambahan pula, kita boleh menyatakan bahawa bukan 1 yang dihantar ke gelung yang menjadikan keadaan benar, tetapi jika sebarang integer bukan sifar dihantar ke gelung while, maka ia akan dianggap sebagai keadaan sebenar, jadi

Penggunaan sementara Penggunaan sementara Sep 25, 2023 am 09:47 AM

Penggunaan while ialah "while condition: code block". blok terus dilaksanakan sehingga syarat adalah palsu. while ialah pernyataan kawalan gelung yang biasa digunakan, digunakan untuk melaksanakan blok kod berulang kali apabila syarat tertentu dipenuhi.

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个关键字。

Apakah struktur kawalan aliran biasa dalam Python? Apakah struktur kawalan aliran biasa dalam Python? Jan 20, 2024 am 08:17 AM

Apakah struktur kawalan aliran biasa dalam Python? Dalam Python, struktur kawalan aliran ialah alat penting yang digunakan untuk menentukan susunan pelaksanaan program. Mereka membenarkan kami melaksanakan blok kod yang berbeza berdasarkan syarat yang berbeza, atau melaksanakan blok kod berulang kali. Berikut akan memperkenalkan struktur kawalan proses biasa dalam Python dan memberikan contoh kod yang sepadan. Pernyataan bersyarat (jika lain): Pernyataan bersyarat membolehkan kami melaksanakan blok kod yang berbeza berdasarkan syarat yang berbeza. Sintaks asasnya ialah: jika keadaan 1: #apabila keadaan

Bagaimana untuk menggunakan pernyataan while dalam java Bagaimana untuk menggunakan pernyataan while dalam java Apr 19, 2023 am 09:28 AM

Nota 1. Maksud Cina kata kunci while ialah apabila..., iaitu, apabila keadaan ditetapkan, kod yang sepadan dilaksanakan dalam gelung. Pernyataan while ialah struktur asas dalam pernyataan gelung, dan format sintaks agak mudah. Proses pelaksanaan 2. Apabila melaksanakan penyataan sementara, mula-mula tentukan keadaan gelung Apabila keadaan gelung adalah palsu, kod penyataan while seterusnya dilaksanakan secara langsung Apabila keadaan gelung adalah benar, kod badan gelung dilaksanakan dan gelung keadaan ditentukan sehingga keadaan gelung tidak diwujudkan. Contoh inti=1;intsum=0;while(i

Penjelasan terperinci tentang fungsi dan penggunaan kata kunci break dalam PHP Penjelasan terperinci tentang fungsi dan penggunaan kata kunci break dalam PHP Jun 28, 2023 pm 06:39 PM

Penjelasan terperinci tentang peranan dan penggunaan kata kunci break dalam PHP Dalam pengaturcaraan PHP, break ialah pernyataan aliran kawalan yang digunakan untuk mengganggu pernyataan gelung atau suis semasa dan melompat keluar dari gelung atau suis. Artikel ini akan memperkenalkan secara terperinci peranan dan penggunaan kata kunci rehat. 1. Pecah dalam gelung Dalam struktur gelung, fungsi pemecahan adalah untuk menamatkan gelung lebih awal dan melompat keluar dari badan gelung untuk melaksanakan kod selepas gelung. Struktur gelung biasa termasuk untuk, sambil dan lakukan...semasa. dalam untuk gelung

Penjelasan terperinci tentang gelung While PHP: Penguasaan menyeluruh prinsip gelung dan senario aplikasi Penjelasan terperinci tentang gelung While PHP: Penguasaan menyeluruh prinsip gelung dan senario aplikasi Apr 09, 2024 pm 03:27 PM

Manakala gelung ialah struktur aliran kawalan yang digunakan untuk melaksanakan pernyataan berulang kali sehingga keadaan palsu. Prinsipnya adalah untuk menyemak keadaan, dan jika ia benar, laksanakan badan gelung, dan kemudian semak keadaan sehingga syarat itu palsu. Ia sesuai untuk situasi di mana operasi perlu dilakukan berulang kali, operasi perlu dilakukan apabila keadaan adalah benar, atau gelung perlu lompat keluar berdasarkan syarat. Contoh praktikal termasuk mencetak nombor genap, mengira nombor perdana dan menggunakan pernyataan putus untuk keluar daripada gelung.

Cara menggunakan penyataan gelung while untuk memproses pautan utama dalam Java Cara menggunakan penyataan gelung while untuk memproses pautan utama dalam Java Apr 25, 2023 am 10:26 AM

Java代码publicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(connectionToHandle)).start();}publicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(newConnectionHandler(connectionToHandle);}成可乬又成又成又安).

See all articles