declare
O
construtor
declare
é
utilizado
para
configurar
diretivas
de
execução
para
blocos
de
código
.
A
sintaxe
do
declare
é
similar
a
sintaxe
de
outros
construtores
de
controle
.
A
seção
diretiva
permite
o
comportamento
do
bloco
declare
a
ser
configurado
.
Atualmente
somente
uma
diretiva
é
reconhecida
:
a
diretiva
ticks
.
(
veja
abaixo
para
maiores
informações
em
diretiva
ticks
)
A
parte
instrucao
do
bloco
declare
será
executada
.
Como
ela
é
executada
e
que
efeitos
colaterais
que
podem
ocorrem
durante
a
execução
dependem
da
configuração
diretiva
.
Ticks
Um
tick
é
um
evento
que
ocorre
para
cada
N
níveis
de
instruções
executados
pelo
interpretador
com
o
bloco
declare
.
O
valor
para
N
é
especificado
utilizando
ticks=
N
nos
blocos
declare
das
seções
diretiva
.
O(
s
)
evento(s
)
que
ocorre(m
)
em
cada
tick
são
especificados
utilizando
register_tick_function(
)
.
Veja
o
exemplo
abaixo
para
maiores
detalhes
.
Note
que
mais
de
um
evento
pode
ocorrer
em
cada
tick
.
Exemplo
12-1
.
Histórico
de
um
trecho
de
código
PHP
?php
/
/
Uma
função
que
grava
o
tempo
entre
as
chamadas
function
profile
(
$dump
=
FALSE
)
{
static
$profile
;
/
/
Retorna
os
tempos
preservados
no
histórico
,
então
apaga
if
($dump
)
{
$temp
=
$profile
;
unset
($profile)
;
return
($temp)
;
}
$profile[
]
=
microtime
()
;
}
/
/
Ativa
o
manipulador
do
tick
register_tick_function("profile")
;
/
/
Inicializa
a
função
antes
de
declarar
o
bloco
profile
()
;
/
/
Roda
um
trecho
de
código
,
disparando
um
tick
a
cada
duas
instruções
declare
(ticks=2
)
{
for
($x
=
1
;
$x
50
;
++$x
)
{
echo
similar_text
(md5($x)
,
md5($x*$x))
,
"
br
/
;"
;
}
}
/
/
Mostra
os
dados
guardados
no
histórico
print_r
(profile
(TRUE))
;
?
|
|
No exemplo acima, o bloco 'declare' grava os tempos a cada
segundo nível dentro das instruções no bloco enquanto executam.
Esta informação pode ser utilizada para encontrar áreas lentas
em segmentos particulares de código. Este processo pode ser
realizado de outras formas, mas a utilização de ticks é mais
conveniente e fácil de implementar.
Ticks
são
idealizados
para
debug
,
implementação
de
multitask
simples
,
processos
de
I
/
O
em
background
e
afins
.
Veja
também
:
register_tick_function(
)
e
unregister_tick_function(
)
.