Jadual Kandungan
php的循环与引用的一个坑,php循环引用
Rumah pembangunan bahagian belakang tutorial 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>
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使用引用,  应该用函数将封装起来

 

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...
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

Tag artikel 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

Dalam bahasa C, apakah perbezaan antara while(1) dan while(0)?

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

Penggunaan sementara

go语言中while是关键字吗 go语言中while是关键字吗 Jun 04, 2021 pm 05:01 PM

go语言中while是关键字吗

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?

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

Bagaimana untuk menggunakan pernyataan while dalam java

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 fungsi dan penggunaan kata kunci break dalam PHP

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

Cara menggunakan penyataan gelung while untuk memproses pautan utama dalam Java

Gelung dan lelaran Python: analisis komprehensif tentang persamaan dan perbezaannya Gelung dan lelaran Python: analisis komprehensif tentang persamaan dan perbezaannya Feb 19, 2024 pm 02:54 PM

Gelung dan lelaran Python: analisis komprehensif tentang persamaan dan perbezaannya

See all articles