取消设置 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...


答案 1

这里你去->

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

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

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


答案 2

不知道你们,但$vars美元不适合我。

我就是这样做的。

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

推荐