2014-10-08 57 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"}); 
}