鍍金池/ 問答/PHP/ php用eval定義static變量疑問

php用eval定義static變量疑問

// 正確方式:
function a(){
    static $c;
    if(empty($c)){
        $c = 'cc';
        echo '<br>init c';
    }
}
a();
a();
// 可以正確的只輸出1次init c

// 錯誤方式:
function a(){
    eval('static $c;');
    if(empty($c)){
        $c = 'cc';
        echo '<br>init c';
    }
}
a();
a();
// 會輸出2次init c

怎樣才能用eval實現(xiàn)定義static變量呢?因為有個地方需要根據(jù)傳參確定static變量名。。

回答
編輯回答
喵小咪

首先我不清楚為什么要用這個函數(shù),還有你的程序為什么需要這個函數(shù),難道它是不可替代的嗎,而且官方文檔說的很明白,這個函數(shù)是極其危險的

clipboard.png

其次,再說說靜態(tài)變量這個東西,它是存在于函數(shù)作用域內(nèi)的,也就是棧里面,一般的函數(shù)內(nèi)變量在函數(shù)結(jié)束后會釋放,但是靜態(tài)變量卻不會。就是說,下次再調(diào)用這個函數(shù)的時候,該變量的值會保留下來,就像你的第一個函數(shù)。
之后,看你的第二個函數(shù),eval('static $c;'),我們說到了作用域這個東西,看看手冊里怎么說的

clipboard.png

這樣應(yīng)該明白了吧,你第二次調(diào)用這個函數(shù)的時候相當于這個靜態(tài)變量又被重新定義了一次

2017年6月1日 05:14