首頁 > 後端開發 > PHP問題 > php如何刪除靜態變數

php如何刪除靜態變數

王林
發布: 2023-03-06 06:26:01
原創
3169 人瀏覽過

php刪除靜態變數的方法:可以透過重新定義的方式進行刪除,如【$temp = null】。不可以使用unset()函數刪除靜態變量,因為函數只是銷毀了局部變數。

php如何刪除靜態變數

PHP設定了靜態變量,如果需要銷毀這個靜態變量,有一個需要注意的地方,如果使用unset($tmp)來刪除,那麼你會發現一件事,例如遞歸函數,裡面需要設有設定一個靜態變量,然後這個遞歸函數需要在foreach()中使用,當執行這個遞歸函數第一次時,需要清空值。如果使用unset()是沒有效果的,查閱資料後發現應該使用$tmp=null。

(推薦教學:php影片教學

資料原型是一個陣列;

$data=[
    '1'=>[
        'pid'=>0,
        'title'=>'test1'
    ],
    '2'=>[
        'pid'=>1,
        'title'=>'test2'
    ],
    '3'=>[
        'pid'=>2,
        'title'=>'test3'
    ],
];
登入後複製

用unset():

function getBreadNav($data,$id,$mark=1){
    static $tmp;
    if($mark==1){
        unset();
    }
    if(isset($data[$id])){
        $tmpresult['title']=$data[$id]['title'];
        $tmp[]=$tmpresult;
        getBreadNav($data,$data[$id]['pid'],$mark=2);
    }
    return $tmp;
}
登入後複製

給變數賦值null:

function getBreadNav($data,$id,$mark=1){
    static $tmp;
    if($mark==1){
        $tmp=null;
    }
    if(isset($data[$id])){
        $tmpresult['title']=$data[$id]['title'];
        $tmp[]=$tmpresult;
        getBreadNav($data,$data[$id]['pid'],$mark=2);
    }
    return $tmp;
}
登入後複製

這是循環開始:

for($i=0;$i<5;$i++){
    getBreadNav($data,3);
}
登入後複製

需要注意的是,手冊中有明確的指示:如果在函數中unset() 一個靜態變量,那麼在函數內部此靜態變數將被銷毀。但是,當再次呼叫此函數時,此靜態變數將被復原為上次被銷毀之前的值。所以這裡我們需要做的就是清空,賦值為null就好了啊。

注意:

unset()在函數中的行為會依賴想要銷毀的變數的型別而有所不同。

如果在函數中unset()一個全域變量,則只是局部變數被銷毀,而在呼叫環境中的變數將保持呼叫unset()之前一樣的值。

如果我們要註銷一個靜態變量,只能透過重新定義的方式來清空。

相關推薦:php培訓

以上是php如何刪除靜態變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板