最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP中使用foreach和引用導(dǎo)致程序BUG的問題介紹

 更新時(shí)間:2012年09月05日 21:35:47   作者:  
PHP 引用有些類似 C 語(yǔ)言指針, 但一些重要的特性和 C 語(yǔ)言指針不一樣, 如果不注意, 會(huì)導(dǎo)致程序 BUG. foreach 操作的是數(shù)組或?qū)ο蟮目截? 但 PHP5, 可以使用引用操作對(duì)象元素本身
復(fù)制代碼 代碼如下:

$a = array(1, 2);
$b = array(11, 12);
foreach($a as &$r){
}
foreach($b as $r){
}
echo $a[1]; // 輸出 12

兩個(gè)的循環(huán)的本意可能是: 第一個(gè)循環(huán)需要在循環(huán)中修改元素的內(nèi)容, 所以使用引用; 但第二個(gè)循環(huán)只是把 $r 當(dāng)作一個(gè)臨時(shí)變量. 可是, 為什么 $a[1] 的值發(fā)生了改變呢?

當(dāng)對(duì) $a 的迭代完成后, $r 是 $a[1] 的引用, 改變 $r 的值, 就是改變 $a[1]. 這時(shí), 你可以會(huì)奇怪, 代碼中并沒有修改 $r, 也沒有修改 $a[1] 呀?

其實(shí), foreach 是操作的是數(shù)組的拷貝, 所以, 后一個(gè)迭代相當(dāng)于:
復(fù)制代碼 代碼如下:

for($i=0; $i<count($b); $i++){
$r = $b[$i]; // 修改了 $r! 相當(dāng)于 $a[1] = $b[$i];
}

為了避免這種情況, 應(yīng)該在第一個(gè)迭代之后, 執(zhí)行
復(fù)制代碼 代碼如下:

unset($r);

從當(dāng)前環(huán)境中刪除 $r 這個(gè)變量(引用變量).

即使不是前面的例子, 在第一個(gè)迭代之后, 仍然十分可能再執(zhí)行類似的語(yǔ)句:
復(fù)制代碼 代碼如下:

$r = 123;

循環(huán)變量一般是臨時(shí)變量, 同一個(gè)變量名在代碼不同的地方表示不同的東西, 但變量的作用域又存在于循環(huán)之外. 這就是這種作用域規(guī)則的壞處, 加上”變量不聲明即使用”的壞外, 再加上變量無(wú)類型的壞處.

所以, 在 PHP 中使用引用變量, 應(yīng)該在引用使用完之后, 應(yīng)該 unset(). 所有變量在使用之前應(yīng)該先 unset().

相關(guān)文章

  • php中通過curl檢測(cè)頁(yè)面是否被百度收錄

    php中通過curl檢測(cè)頁(yè)面是否被百度收錄

    最近要對(duì)網(wǎng)站做個(gè)整理,需要檢測(cè)網(wǎng)站內(nèi)哪些頁(yè)面沒有被百度搜索引擎收錄從而進(jìn)行相關(guān)的調(diào)整。由于使用site命令一條條的去看實(shí)在是看不過來,就想到了使用php程序來批量處理一下
    2013-09-09
  • php數(shù)組函數(shù)序列之next() - 移動(dòng)數(shù)組內(nèi)部指針到下一個(gè)元素的位置,并返回該元素值

    php數(shù)組函數(shù)序列之next() - 移動(dòng)數(shù)組內(nèi)部指針到下一個(gè)元素的位置,并返回該元素值

    next() 函數(shù)把指向當(dāng)前元素的指針移動(dòng)到下一個(gè)元素的位置,并返回該元素的值。如果內(nèi)部指針已經(jīng)超過數(shù)組的最后一個(gè)元素,函數(shù)返回 false
    2011-10-10
  • PHP與Web頁(yè)面的交互示例詳解二

    PHP與Web頁(yè)面的交互示例詳解二

    這篇文章主要介紹了PHP與Web頁(yè)面的交互示例詳解二,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • PHP技術(shù)開發(fā)技巧分享

    PHP技術(shù)開發(fā)技巧分享

    本文檔的閱讀對(duì)象是有一定經(jīng)驗(yàn)的PHP程序員,文檔中將介紹在PHP開發(fā)中的一些開發(fā)技巧,希望能對(duì)讀者有一定的啟發(fā)。
    2010-03-03
  • PHP兩種實(shí)現(xiàn)無(wú)級(jí)遞歸分類的方法

    PHP兩種實(shí)現(xiàn)無(wú)級(jí)遞歸分類的方法

    本文主要介紹了PHP兩種實(shí)現(xiàn)無(wú)級(jí)遞歸分類的方法,具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • php SQL Injection with MySQL

    php SQL Injection with MySQL

    本文僅用于教學(xué)目的,如果因?yàn)楸疚脑斐傻墓艉蠊救烁挪回?fù)責(zé),本文所有代碼均為本人所寫,所有數(shù)據(jù)均經(jīng)過測(cè)試。絕對(duì)真實(shí)。
    2011-02-02
  • PHP實(shí)現(xiàn)正則表達(dá)式分組捕獲操作示例

    PHP實(shí)現(xiàn)正則表達(dá)式分組捕獲操作示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)正則表達(dá)式分組捕獲操作,結(jié)合實(shí)例形式分析了php正則表達(dá)式獲取分組捕獲操作的相關(guān)實(shí)現(xiàn)方法與使用注意事項(xiàng),需要的朋友可以參考下
    2018-02-02
  • PHP生成不重復(fù)標(biāo)識(shí)符的方法

    PHP生成不重復(fù)標(biāo)識(shí)符的方法

    這篇文章主要介紹了PHP生成不重復(fù)標(biāo)識(shí)符的方法,涉及時(shí)間函數(shù)time的md5轉(zhuǎn)換,uniqid()函數(shù)及GUID的應(yīng)用,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-11-11
  • 定義php常量的詳解

    定義php常量的詳解

    本篇文章是對(duì)定義php常量進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP session有效期問題

    PHP session有效期問題

    PHP中的session有效期默認(rèn)是1440秒(24分鐘)【weiweiok 注:php5里默認(rèn)的是180分】,也就是說,客戶端超過24分鐘沒有刷新,當(dāng)前session就會(huì)失效。很明顯,這是不能滿足需要的。
    2009-04-04

最新評(píng)論

乌鲁木齐市| 永靖县| 丰台区| 双峰县| 延川县| 惠水县| 郴州市| 江孜县| 平江县| 萨嘎县| 伊川县| 云阳县| 钦州市| 枞阳县| 客服| 曲麻莱县| 闻喜县| 吴堡县| 东安县| 梨树县| 云龙县| 松江区| 盈江县| 额尔古纳市| 瓦房店市| 图木舒克市| 申扎县| 醴陵市| 衡水市| 梁平县| 中西区| 海林市| 祁东县| 桦南县| 仙桃市| 镇康县| 论坛| 龙江县| 田林县| 错那县| 屯门区|