成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導(dǎo)航首頁 ? 技術(shù)教程 ? 淺談PHP中關(guān)于foreach使用引用變量的坑
全站頭部文字 我要出現(xiàn)在這里
淺談PHP中關(guān)于foreach使用引用變量的坑 741 2024-01-21   

寫PHP好多年,但仍然會犯低級錯誤,今天遇到個 foreach中引用變量時的坑,PHP版本為 5.6.12 代碼如下:

<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
foreach ($arr as $i=>&$a) {
  $a = $a.'_'. $a;
  echo $a .'<br>';
}
echo '<hr>';
foreach ($arr as $i=>$a) {
  echo $a .'<br>';
}
echo '<hr>';
print_r($arr);

輸出結(jié)果

查看圖片

一開始看到第二個 foreach 輸出的結(jié)果感覺很是莫名其妙,怎么會輸出兩個 d_d 呢?

仔細想了想,原來因為PHP foreach 中的 $a 的作用域是整個函數(shù)的局部變量,在循環(huán)外部仍然有效,而不是被封閉在循環(huán)內(nèi)的,

所以當執(zhí)行第二個foreach 時的 $a 并不是新的變量,而是仍然指向 $arr 數(shù)組第5個元素的地址引用,

當?shù)诙€ foreach 在循環(huán)時實際上是在不停的給 $arr 數(shù)組的第5個元素賦值,

具體賦值情況,

第一次:a_a 賦值給第5個元素, 結(jié)果為: [a_a, b_b, c_c, d_d,a_a]

第二次:b_b 賦值給第5個元素,結(jié)果為: [a_a, b_b, c_c, d_d,b_b]

第三次:c_c 賦值給第5個元素,結(jié)果為: [a_a, b_b, c_c, d_d,c_c]

第四次:d_d 賦值給第5個元素,結(jié)果為: [a_a, b_b, c_c, d_d,d_d]

第五次:此時因為第五個元素已經(jīng)變成 d_d 又重新把 d_d 賦值給第5個元素,結(jié)果還是為: [a_a, b_b, c_c, d_d,d_d]

解決辦法:

1.盡量不使用相同的循環(huán)變量名;

2.每次使用完或再次使用前進行 unset($a); 處理,解除地址應(yīng)用

還是用上面代碼示例:

$arr = ['a', 'b', 'c', 'd', 'e'];
foreach ($arr as $i=>&$a) {
  $a = $a.'_'. $a;
  echo $a .'<br>';
}
echo '<hr>';
echo $a;
echo '<hr>';

// 這里 unset 掉
unset($a);

echo $a = 'ccc';
echo '<hr>';
print_r($arr);
echo '<hr>';
foreach ($arr as $i=>$a) {
  echo $a .'<br>';
}
echo '<hr>';
print_r($arr);

輸出結(jié)果:

查看圖片

現(xiàn)在就正常了,這些小細節(jié)一定要注意了

以上就是小編為大家?guī)淼臏\談PHP中關(guān)于foreach使用引用變量的坑全部內(nèi)容了,希望大家多多支持綠夏網(wǎng)~


PHP

主站蜘蛛池模板: 就爱小姐姐| 春娇与志明电影| 抖音账号| 免费播放高清完整版电影| 谍变1939电视剧剧情介绍| 美人计电影国语免费观看| 九宫格数独100题及答案| dj视频mv| 最贵的烟前十名| 我记得你| 电视剧警察锅哥免费观看全集| 建设工程监理规范最新版50319-2019| 社会好全部歌词| 色·戒未删减版| footjob videos| 动漫秀场| 叶问3演员表| 詹妮弗康纳利的电影| 免费观看电影网| love 电影| 闺蜜之夏 电影| 轨迹地图| 斑点狗动画片| 小班健康活动教案40篇| 洛城僵尸| 小兰花现代诗| 大内群英 电视剧| 谈判专家 电影| 拿铁热量高吗| a级性片| 美国伦理片禁忌| 越战电影《天与地》| 2024年血糖标准| 黑暗时刻| 玉匣记全文免费| 乔治桑| 想要女朋友电影| 今天是你的生日bb伴奏正谱| 嗯~啊~快点死我男男视频| 姐妹在线观看| 朴信惠电视剧|

!!!站長長期在線接!!!

網(wǎng)站、小程序:定制開發(fā)/二次開發(fā)/仿制開發(fā)等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103