2015-08-17 8 views
7

So cosa l'uso dell'operatore sta facendo in qualcosa di simile function($x,$y) use ($z) { ...Perché PHP ha bisogno dell'operatore operatore per le chiusure?

Quello che non capisco è il motivo per cui PHP usa questa costruzione, quando altre lingue non lo fanno?

+1

possibile duplicato di [Perché le variabili PHP iniziano con un simbolo $ segno?] (Http://stackoverflow.com/questions/3073812/why-php-variables-start-with-a-sign-symbol) –

+4

My spontaneous un suggerimento sarebbe che il motore di ambito di PHP non è in grado di affrontare il problema in modo efficiente ed estendere esplicitamente l'ambito delle variabili è stato più semplice da implementare. Ancora una volta, solo una supposizione però. – deceze

+0

La [RFC for closures and lambdas] (https://wiki.php.net/rfc/closures) sembra avvicinarsi a una risposta, ma sembra coprire più del _what_ che del _why_. – HPierce

risposta

0

Javascript ha scope variabile piuttosto allentato (non è necessario dichiarare variabili come globali). PHP ha un ambito variabile più stretto (se una variabile non è definita nell'ambito che è stata usata, e non è stata introdotta con global, allora non esiste).

La dichiarazione use indica a PHP di rendere tali variabili disponibili all'interno della chiusura (e probabilmente dice anche al garbage collector di non ripulirle fino a dopo che la chiusura è stata ripulita).