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

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

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

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

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

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

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

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

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

unset($r);

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

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

$r = 123;

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

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

相關(guān)文章

  • php中通過curl檢測頁面是否被百度收錄

    php中通過curl檢測頁面是否被百度收錄

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

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

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

    PHP與Web頁面的交互示例詳解二

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

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

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

    PHP兩種實現(xiàn)無級遞歸分類的方法

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

    php SQL Injection with MySQL

    本文僅用于教學(xué)目的,如果因為本文造成的攻擊后果本人概不負責(zé),本文所有代碼均為本人所寫,所有數(shù)據(jù)均經(jīng)過測試。絕對真實。
    2011-02-02
  • PHP實現(xiàn)正則表達式分組捕獲操作示例

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

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

    PHP生成不重復(fù)標識符的方法

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

    定義php常量的詳解

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

    PHP session有效期問題

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

最新評論

望城县| 犍为县| 香格里拉县| 衡山县| 喀喇沁旗| 博白县| 锦屏县| 旬邑县| 综艺| 和林格尔县| 鹤庆县| 静海县| 江阴市| 桐柏县| 宿迁市| 杭锦旗| 乌兰察布市| 江西省| 张家港市| 吉林省| 文水县| 土默特右旗| 呼伦贝尔市| 原平市| 和硕县| 贺州市| 塔河县| 绥德县| 田林县| 舒兰市| 砚山县| 德惠市| 城固县| 丹阳市| 娱乐| 平远县| 安平县| 江永县| 崇文区| 石阡县| 南和县|