Ash501
Ash501

Reputation: 331

Unset all variables in PHP script

Trying to unset automatically all variables in script.

Have tried this way:

  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());

Why does it not work?

Is there a better way to do this?

Thanks for helping!

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

Upvotes: 16

Views: 26498

Answers (4)

pycvalade
pycvalade

Reputation: 181

I couldn't run @airtech's answer on my PHP 7.0 instance. It throws an array to string conversion error.

This updated/simplified version of his solution works for me (I also added curly braces "{ }" for more clarity):

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

To answer the original question, as others stated, implode would just create a string of what looks like variables but wouldn't be interpreted as such by PHP.

The code solving the issue makes use of the "variable variables" concept in PHP. More on this concept here: https://www.php.net/manual/en/language.variables.variable.php

Upvotes: -1

Leo Leoncio
Leo Leoncio

Reputation: 1729

don't know about you guys, but $$vars doesn't work for me.

that's how I did it.

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

Upvotes: 7

ferhad
ferhad

Reputation: 41

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

Upvotes: 3

airtech
airtech

Reputation: 496

Here ya go ->

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

And to clarify, implode returns "a string representation of all the array elements in the same order". http://php.net/manual/en/function.implode.php

Unset requires the actual variable as a parameter, not just a string representation. Which is similiar to what get_defined_vars() returns (not the actual variable reference). So the code goes through the array of strings, and returns each as a reference using the extra $ in front - which unset can use.

Upvotes: 18

Related Questions