2014-10-08 16 views
11

Provare a rimuovere automaticamente tutte le variabili nello script.Annulla l'impostazione di tutte le variabili nello script PHP

hanno cercato in questo modo:

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

Perché non funziona?

C'è un modo migliore per farlo?

Grazie per l'aiuto!

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

+3

Perché è necessario farlo? –

+1

Penso che tu abbia frainteso l'uso della funzione implode .. –

+0

Non c'è molto motivo per rimuovere tutte le variabili. La gestione della memoria in php è come C o C++ dove la memoria allocata deve essere liberata. PHP libererà automaticamente tutta la memoria utilizzata dopo l'esecuzione dello script. –

risposta

13

Qui ya go ->

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

E per chiarire, implodere restituisce "una rappresentazione di stringa di tutti gli elementi dell'array nello stesso ordine". http://php.net/manual/en/function.implode.php

Unset richiede la variabile effettiva come parametro, non solo una rappresentazione di stringa. Che è simile a ciò che get_defined_vars() restituisce (non il riferimento alla variabile attuale). Quindi il codice passa attraverso l'array di stringhe e restituisce ciascuna come riferimento usando l'extra $ in primo piano - che unset può utilizzare.

+0

Attendiamo solo un secondo e lo correggo – airtech

+0

Aspetta che funzioni prima - dammi qualche – airtech

+0

Questo non funziona per me. Non penso che $ vars venga assegnato per riferimento. Non stai semplicemente disabilitando la copia nella variabile vars lasciando intatto l'originale? – ssnobody

3

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

+1

** Solo una nota: ** Questo deve essere eseguito nell'ambito globale - usando questo in funzione si generano errori! Meglio usare 'unset ($ GLOBALS [$ k])' invece di 'unset ($ k)'. – Soaku

2

non so voi ragazzi, ma $$ vars non funziona per me.

è così che l'ho fatto.

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