PHP e ambito delle funzioni

Mi stavo chiedendo cosa succede esattamente quando lo faccio:

$my_variable = 'foo'; function whatever(){ $my_variable = 'bar'; global $my_variable; } 

So che, nell'ambito della function $my_variable è ora 'foo'.

Cosa succede internamente? Quando faccio $my_variable = 'bar'; all'interno della mia function, ho creato una variabile locale. Quando global $my_variable; sulla linea successiva cosa succede esattamente? Quello locale viene automaticamente cancellato?

Fino a quando non viene elaborato il global , la function utilizzerà la copia locale della bar del varabile. Una volta dichiarata globale, la versione locale è nascosta (o forse distrutta, non è sicuro …) e solo la versione globale è disponibile. per esempio:

 $z = 'foo'; function whatever() { echo $z; // warning: undefined variable $z = 'bar'; echo $z; // bar global $z; echo $z; // foo } whatever(); 

, quello locale viene automaticamente cancellato o probabilmente meglio formulato, viene sostituito con la variabile globale.

Pensalo in questo modo:

 $GLOBALS['my_variable'] = 'foo'; function whatever(){ $my_variable = 'bar'; $my_variable = $GLOBALS['my_variable']; }