2014-10-08 3 views
11

Versuch, alle Variablen im Skript automatisch zu deaktivieren.Alle Variablen im PHP-Skript aufheben

haben diese Art und Weise versucht:

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

Warum funktioniert es nicht?

Gibt es einen besseren Weg, dies zu tun?

Vielen Dank für Ihre Hilfe!

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

+3

Warum müssen Sie es überhaupt tun? –

+1

Ich denke, Sie haben die Verwendung von Implode-Funktion missverstanden. –

+0

Es gibt nicht viel Grund, alle Variablen zu deaktivieren. Speicherverwaltung in PHP ist wie C oder C++, wo zugewiesener Speicher freigegeben werden muss. PHP wird den gesamten verwendeten Speicher automatisch freigeben, nachdem das Skript ausgeführt wurde. –

Antwort

13

Hier ya go ->

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

Und zu klären, implodieren returns "eine String-Darstellung aller Array-Elemente in der gleichen Reihenfolge". http://php.net/manual/en/function.implode.php

Unset erfordert die tatsächliche Variable als Parameter, nicht nur eine Zeichenfolgendarstellung. Ähnlich wie get_defined_vars() zurückgibt (nicht die tatsächliche Variablenreferenz). Also durchläuft der Code das Array von Strings und gibt jedes als Referenz zurück, wobei das zusätzliche $ vorne verwendet wird - welches Unset verwenden kann.

+0

Eigentlich nur eine Sekunde halten und ich werde es korrigieren – airtech

+0

Halten Sie an das war früher arbeiten - geben Sie mir ein paar – airtech

+0

Dies funktioniert nicht für mich. Ich glaube nicht, dass $ vars als Referenz zugewiesen wird. Schütteln Sie nicht einfach die Kopie in der Variablen vars, während Sie das Original unverändert lassen? – ssnobody

3

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

+1

** Nur eine Anmerkung: ** Dies muss im globalen Bereich ausgeführt werden - mit dieser in Funktion wird Fehler werfen! Es ist besser, 'unset ($ GLOBALS [$ k])' anstelle von 'unset ($ k)' zu verwenden. – Soaku

2

wissen nicht, wie es euch geht, aber $$ Vars nicht für mich arbeiten.

so habe ich es gemacht.

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