取消设置PHP脚本中的所有变量

时间:2014-10-08 01:42:29

标签: php memory memory-management memory-leaks unset

尝试自动取消脚本中的所有变量。

尝试过这种方式:

  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...

4 个答案:

答案 0 :(得分:14)

这里你去 - &gt;

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

为了澄清,implode以相同的顺序返回&#34;所有数组元素的字符串表示&#34;。 http://php.net/manual/en/function.implode.php

取消设置需要将实际变量作为参数,而不仅仅是字符串表示。这与get_defined_vars()返回的内容类似(不是实际的变量引用)。所以代码遍历字符串数组,并使用前面的额外$返回每个字符串作为引用 - unset可以使用。

答案 1 :(得分:3)

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

答案 2 :(得分:3)

不了解你们,但是$$变量对我来说并不起作用。

我是怎么做到的。

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

答案 3 :(得分:0)

我无法在PHP 7.0实例上运行@airtech的答案。它将数组抛出字符串转换错误。

他的解决方案的此更新/简化版本对我有用(为了清楚起见,我还添加了花括号“ {}”)

foreach(array_keys(get_defined_vars()) as $strVarName){
  unset(${$strVarName});
}

要回答最初的问题,就像其他人所说的,implode只会创建一个看起来像变量的字符串,但不会被PHP解释为这样。

解决问题的代码利用了PHP中的“变量变量”概念。有关此概念的更多信息,请参见: https://www.php.net/manual/en/language.variables.variable.php