Reputation: 331
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
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
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
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