php如何刪除靜態變數

2020-09-28 09:00:47

php刪除靜態變數的方法:可以通過重新定義的方式進行刪除,如【$temp = null】。不可以使用unset()函數刪除靜態變數,因為該函數只是銷燬了區域性變數。

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

(推薦教學:)

資料原型是一個陣列;

$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如何刪除靜態變數的詳細內容,更多請關注TW511.COM其它相關文章!