Como todo mundo sabe as variáveis não são globais, isto é, não funcionam em um escopo diferente do qual foi definida.

O PROBLEMA

1 $programa = “Chaves”;
2 $horario =19:15″;
3 $exibicao = “segunda à sexta”;
4 $canal = “SBT”;
5
6 function exibirPrograma() {
7 echo “O programa {$programa} é exibido de {$exibicao} às {$horario} no canal {$canal}”;
8 }

Isto não iria interpretar nenhuma variável, afinal as variáveis foram setadas fora do escopo da função. A solução seria utilizar a palavra chave global ou a supervariável $GLOBALS ou até mesmo passar as variáveis por parâmetro (nossa, essa última é gambiarra total).

A SOLUÇÃO

1 function exibirPrograma() {
2 global $programa, $exibicao, $horario, $canal;
3 echo “O programa {$programa} é exibido de {$exibicao} às {$horario} no canal {$canal}”;
4 }

OU

1 function exibirPrograma() {
2 echo “O programa {$GLOBALS[programa]} é exibido de {$GLOBALS[exibicao} às {$GLOBALS[horario]} no canal {$GLOBALS[canal]}”;
3 }

Bem, isso todo mundo já sabe, agora imagine que você tenha que “globalizar” 100 variáveis, vai ser muito chato utilizar o termo global ou a variável $GLOBALS 100 vezes, correto?

A MÁGICA

1 function exibirPrograma() {
2 extract(array_slice($GLOBALS,7));
3 echo “O programa {$programa} é exibido de {$exibicao} às {$horario} no canal {$canal}”;
4 }

Isso importaria para a função todas as variáveis que foram setadas no escopo local da página, assim evitando que você altere todo seu código. A função extract() faz exatamente isso, define variáveis através de chaves de um array. Na função array_slice() é removido os 7 primeiros elementos de $GLOBALS que não há necessidade de importá-los, pois já são supervariáveis globais (_POST, _GET, _SERVER, etc)