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

Ash*_*501 12 php memory memory-leaks memory-management 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());
Run Code Online (Sandbox Code Playgroud)

为什么不起作用?

有一个更好的方法吗?

谢谢你的帮助!

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

air*_*ech 14

在这里你去 - >

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

为了澄清,implode返回"以相同顺序排列所有数组元素的字符串表示形式". http://php.net/manual/en/function.implode.php

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


Leo*_*cio 6

不了解你们,但 $$vars 对我不起作用。

我就是这样做的。

$vars = array_keys(get_defined_vars());
foreach($vars as $var) {
    unset(${"$var"});
}
Run Code Online (Sandbox Code Playgroud)