2014-10-08 55 views
11

嘗試自動取消設置腳本中的所有變量。取消設置PHP腳本中的所有變量

試過這樣:

echo '<br /> Variables in Script before unset(): <br />'; 
    print_r(array_keys(get_defined_vars())); 
    echo '<br /><br />'; 
    var_dump(get_defined_vars()); 

    // Creates string of comma-separated variables(*) for unset. 
    $all_vars = implode(', $', array_keys(get_defined_vars())); 

    echo '<br /><br />'; 
    echo '<br />List Variables in Script: <br />'; 
    echo $all_vars; 
    unset($all_vars); 

    echo '<br /><br />'; 
    echo '<br />Variables in Script after unset(): <br />'; 
    print_r(array_keys(get_defined_vars())); 
    echo '<br />'; 
    var_dump(get_defined_vars()); 

爲什麼它不工作?

有沒有更好的方法來做到這一點?

感謝您的幫助!

(*) It's seems somewhat that it does not really create the variables, but a string that looks like variables...

+3

爲什麼你需要這樣做呢? – 2014-10-08 01:45:50

+1

我認爲你誤解了內爆函數的使用.. – 2014-10-08 01:57:38

+0

沒有太多的理由來取消設置所有變量。 PHP中的內存管理就像C或C++,其中分配的內存需要被釋放。執行腳本後,PHP將自動釋放所有使用過的內存。 – 2014-10-08 02:05:20

回答

13

這裏亞去 - >

$vars = array_keys(get_defined_vars()); 
for ($i = 0; $i < sizeOf($vars); $i++) { 
    unset($$vars[$i]); 
} 
unset($vars,$i); 

,並澄清,破滅返回「以相同的順序將所有數組元素的字符串表示」。 http://php.net/manual/en/function.implode.php

Unset要求實際變量作爲參數,而不僅僅是一個字符串表示。它類似於get_defined_vars()返回的內容(不是實際的變量引用)。因此,代碼會遍歷字符串數組,並使用額外的$前面中的每一個作爲引用返回 - 未使用的可以使用。

+0

其實只要堅持一秒鐘,我會糾正它 – airtech 2014-10-08 01:54:24

+0

堅持這是更早的工作 - 給我幾個 – airtech 2014-10-08 02:09:16

+0

這不適合我。我不認爲$變量被引用分配。你不是隻是在原始版本中修改了變量的副本嗎? – ssnobody 2014-10-08 02:09:43

3

foreach (array_keys($GLOBALS) as $k) unset($$k); unset($k);

+1

**只需注意:**必須在全局範圍內運行 - 在函數中使用此命令會拋出錯誤!最好使用'unset($ GLOBALS [$ k])'而不是'unset($ k)'。 – Soaku 2017-09-14 19:05:39

2

不知道你們這些傢伙,但$$瓦爾對我不起作用。

這就是我做到的。

$vars = array_keys(get_defined_vars()); 
foreach($vars as $var) { 
    unset(${"$var"}); 
}