2013-02-13 6 views
7

Sono uno sviluppatore JS e uso routinariamente funzioni anonime eseguibili per ridurre al minimo l'inquinamento dell'ambito globale.Variabili di wrapping in funzioni anonime in PHP

cioè: (JS)

(function(){ 
    var x = ... 
})(); 

È la stessa tecnica possibile/consigliabile in PHP per ridurre al minimo la funzione/scontri nome di variabile?

cioè: (PHP)

(function(){ 

    $x = 2; 

    function loop($a){ 
     ... 
    } 

    loop($x); 

})(); 
+3

Non esattamente, ma in PHP è possibile utilizzare lo spazio dei nomi per evitare "globale". – Passerby

+0

O in altre parole, non è richiesto a causa della parola chiave dello spazio dei nomi – hek2mgl

+0

Hmm soluzione interessante. Come passare dall'ambito globale al namespace e viceversa? – JackMahoney

risposta

3

Per evitare inquinamento globale, classi di uso e un approccio orientato oggetto: See PHP docs here

Per evitare ulteriore inquinamento, evitare variabili statiche e globali.

Chiusure come quella che hai mostrato sono usate in Javascript è dovuto al fatto che (Javascript) è un linguaggio basato su prototipi, con proprietà fuori (nel senso formativo) normalmente mostrate in un linguaggio basato su OO.

1

Sì, è possibile creare funzioni anonime in PHP che si eseguono immediatamente senza inquinare lo spazio dei nomi globale;

call_user_func(function() { 
    $a = 'hi'; 
    echo $a; 
}); 

La sintassi non è carina come l'equivalente Javascript, ma fa lo stesso lavoro. Trovo che il costrutto sia molto utile e lo uso spesso.

È inoltre possibile restituire valori come questo;

$str = call_user_func(function() { 
    $a = 'foo'; 
    return $a; 
}); 

echo($str); // foo 
echo($a);  // Causes 'Undefined variable' error.