Escopo
de
variáveis
O
escopo
de
uma
variável
é
o
contexto
onde
ela
foi
definida
.
A
maior
parte
das
variáveis
do
PHP
tem
somente
escopo
local
.
Este
escopo
local
inclui
os
arquivos
incluídos
.
Por
exemplo
:
Aqui
a
variável
$a
estará
disponível
no
script
incluído
b.inc
.
Entretanto
,
com
as
funções
definidas
pelo
usuário
,
um
escopo
local
é
introduzido
.
Quaisquer
variáveis
utilizadas
dento
da
função
é
por
default
limitada
dentro
do
escopo
local
da
função
.
Por
exemplo
:
Este
script
não
produz
nenhuma
saída
porque
a
instrução
echo(
)
refere-se
a
uma
versão
local
da
variável
$a
,
e
ela
não
tem
nenhum
valor
assimilado
nesse
escopo
.
Essa
é
uma
pequena
diferença
da
linguagem
C
quando
variáveis
globais
são
automaticamente
disponíveis
para
funções
sem
sobreescrever
uma
eventual
definição
local
.
Isto
causa
problemas
quando
as
pessoas
mudam
inadivertidamente
uma
variável
global
.
No
PHP
,
as
variáveis
globais
precisam
ser
declaradas
globais
dentro
de
uma
função
se
ela
vai
ser
utilizada
naquela
função
.
Um
exemplo
:
O
script
acima
imprimirá
"
3
"
.
Declarando
$a
e
$b
globais
na
função
,
todas
as
referências
a
essas
variáveis
referem-se
a
versão
global
.
Não
há
um
limite
para
o
número
de
variáveis
globais
que
podem
ser
manipuladas
por
uma
função
.
Uma
segunda
maneira
de
acessar
variáveis
do
escopo
global
é
utilizando
o
array
especial
$GLOBALS
definido
pelo
PHP
.
O
exemplo
anterior
poderia
ser
rescrito
como
:
O
array
$GLOBALS
é
um
array
associativo
onde
o
nome
da
variável
global
é
a
chave
do
array
e
o
seu
conteúdo
da
variável
como
o
valor
do
elemento
do
array
.
Veja
que
$GLOBALS
existe
em
qualquer
escopo
,
isto
porque
$GLOBALS
é
uma
superglobal
.
Segue
um
exemplo
demonstrando
o
poder
das
superglobais
:
Outro
recurso
importante
do
escopo
de
variáveis
é
a
variável
estática
.
Uma
variável
estática
existe
somente
no
escopo
local
da
função
,
mas
ela
não
perde
seu
valor
quando
o
nível
de
execução
do
programa
deixa
o
escopo
.
Considere
o
seguinte
exemplo
:
Essa
função
é
inútil
partindo
de
que
cada
vez
que
ela
é
chamada
,
ela
coloca
em
$a
o
valor
0
e
imprime
"
0
"
.
A
instrução
$a
+
+
,
que
aumenta
o
valor
da
variável
não
tem
sentido
desde
que
a
função
sai
e
a
variável
$a
desaparece
.
Para
faze-la
mais
útil
como
contadora
sem
deixar
de
perder
o
sua
conta
atual
,
a
variável
$a
é
declarada
como
estática
:
Agora
,
cada
vez
que
a
função
Teste(
)
for
chamada
ele
imprimirá
o
valor
de
$a
e
o
incrementará
.
Variáveis
estáticas
fornecem
uma
solução
ideal
para
funções
recursivas
.
Uma
função
recursiva
é
aquela
se
chama
a
si
mesma
.
Cuidados
especiais
precisam
ser
tomados
quando
escrevendo
funções
recursivas
porque
é
possível
que
ela
continue
na
recursão
indefinidamente
.
Você
tem
de
ter
certeza
que
há
uma
maneira
segura
de
terminar
a
recursão
.
A
seguinte
função
recursiva
conta
até
10
,
utilizando
a
variável
estática
$count
para
saber
quando
parar
:
O
Zend
Engine
1
,
base
do
PHP4
,
implementa
os
modificadores
static
e
global
para
variáveis
em
termos
de
referência
.
Por
exemplo
,
uma
variável
global
importada
dentro
do
escopo
de
uma
função
com
a
instrução
global
atualmente
cria
uma
referência
para
a
variável
global
.
Isto
pode
causar
comportamentos
impresíveis
para
os
seguintes
casos
:
Executando
esse
exemplo
você
terá
as
seguites
saídas
:
Uma
situação
similar
se
aplica
ao
modificador
static
.
Referências
não
são
armazenadas
estaticamente
:
Executando
esse
exemplo
você
terá
as
seguites
saídas
:
Objeto
estatico
:
NULL
Objeto
estatico
:
NULL
Objeto
estatico
:
NULL
Objeto
estatico
:
object(
stdClass)(1
)
{
["property"]=
int(1
)
}
|
Este
exemplo
demonstra
que
quando
assimilando
uma
referência
para
uma
variável
estática
,
ela
não
se
lembra
quando
você
chama
a
função
get_instance_ref(
)
uma
segunda
vez
.