<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >declare</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="Manual do PHP" HREF="index.html"><LINK REL="UP" TITLE="Estruturas de Controle" HREF="language.control-structures.html"><LINK REL="PREVIOUS" TITLE="switch" HREF="control-structures.switch.html"><LINK REL="NEXT" TITLE="return" HREF="function.return.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Manual do PHP</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="control-structures.switch.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Capítulo 16. Estruturas de Controle</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="function.return.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="control-structures.declare" ><TT CLASS="literal" >declare</TT ></A ></H1 ><P > O construtor <TT CLASS="literal" >declare</TT > é utilizado para configurar diretivas de execução para blocos de código. A sintaxe do <TT CLASS="literal" >declare</TT > é similar a sintaxe de outros construtores de controle. <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN4859" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="programlisting" >declare (diretiva) instrucao</PRE ></TD ></TR ></TABLE ><P ></P ></DIV > </P ><P > A seção <TT CLASS="literal" >diretiva</TT > permite o comportamento do bloco <TT CLASS="literal" >declare</TT > a ser configurado. Atualmente somente uma diretiva é reconhecida: a diretiva <TT CLASS="literal" >ticks</TT >. (veja abaixo para maiores informações em <A HREF="control-structures.declare.html#control-structures.declare.ticks" >diretiva ticks</A >) </P ><P > A parte <TT CLASS="literal" >instrucao</TT > do bloco <TT CLASS="literal" >declare</TT > será executada. Como ela é executada e que efeitos colaterais que podem ocorrem durante a execução dependem da configuração <TT CLASS="literal" >diretiva</TT >. </P ><P > O construtor <TT CLASS="literal" >declare</TT > também pode ser utilizado no escopo global, afetando todo o código que se seguir. <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN4872" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">// isso eh o mesmo:<br /><br />// voce pode fazer isso:<br /></font><font color="#007700">declare(</font><font color="#0000BB">ticks</font><font color="#007700">=</font><font color="#0000BB">1</font><font color="#007700">) {<br /> </font><font color="#FF8000">// script inteiro aqui<br /></font><font color="#007700">}<br /><br /></font><font color="#FF8000">// ou pode fazer isto:<br /></font><font color="#007700">declare(</font><font color="#0000BB">ticks</font><font color="#007700">=</font><font color="#0000BB">1</font><font color="#007700">);<br /></font><font color="#FF8000">// sctipt inteiro aqui<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="control-structures.declare.ticks" >Ticks</A ></H2 ><P >Um tick é um evento que ocorre para cada <CODE CLASS="varname" >N</CODE > níveis de instruções executados pelo interpretador com o bloco <TT CLASS="literal" >declare</TT >. O valor para <CODE CLASS="varname" >N</CODE > é especificado utilizando <TT CLASS="literal" >ticks=<CODE CLASS="varname" >N</CODE ></TT > nos blocos <TT CLASS="literal" >declare</TT > das seções <TT CLASS="literal" >diretiva</TT >. </P ><P > O(s) evento(s) que ocorre(m) em cada tick são especificados utilizando <A HREF="function.register-tick-function.html" ><B CLASS="function" >register_tick_function()</B ></A >. Veja o exemplo abaixo para maiores detalhes. Note que mais de um evento pode ocorrer em cada tick. </P ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN4887" ></A ><P ><B >Exemplo 16-3. Histórico de um trecho de código PHP</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">// Uma função que grava o tempo entre as chamadas<br /></font><font color="#007700">function </font><font color="#0000BB">profile </font><font color="#007700">(</font><font color="#0000BB">$dump </font><font color="#007700">= </font><font color="#0000BB">FALSE</font><font color="#007700">)<br />{<br /> static </font><font color="#0000BB">$profile</font><font color="#007700">;<br /><br /> </font><font color="#FF8000">// Retorna os tempos preservados no histórico, então apaga<br /> </font><font color="#007700">if (</font><font color="#0000BB">$dump</font><font color="#007700">) {<br /> </font><font color="#0000BB">$temp </font><font color="#007700">= </font><font color="#0000BB">$profile</font><font color="#007700">;<br /> unset (</font><font color="#0000BB">$profile</font><font color="#007700">);<br /> return </font><font color="#0000BB">$temp</font><font color="#007700">;<br /> }<br /><br /> </font><font color="#0000BB">$profile</font><font color="#007700">[] = </font><font color="#0000BB">microtime </font><font color="#007700">();<br />}<br /><br /></font><font color="#FF8000">// Ativa o manipulador do tick<br /></font><font color="#0000BB">register_tick_function</font><font color="#007700">(</font><font color="#DD0000">"profile"</font><font color="#007700">);<br /><br /></font><font color="#FF8000">// Inicializa a função antes de declarar o bloco<br /></font><font color="#0000BB">profile</font><font color="#007700">();<br /><br /></font><font color="#FF8000">// Roda um trecho de código, disparando um tick a cada duas instruções<br /></font><font color="#007700">declare(</font><font color="#0000BB">ticks</font><font color="#007700">=</font><font color="#0000BB">2</font><font color="#007700">) {<br /> for (</font><font color="#0000BB">$x </font><font color="#007700">= </font><font color="#0000BB">1</font><font color="#007700">; </font><font color="#0000BB">$x </font><font color="#007700">< </font><font color="#0000BB">50</font><font color="#007700">; ++</font><font color="#0000BB">$x</font><font color="#007700">) {<br /> echo </font><font color="#0000BB">similar_text</font><font color="#007700">(</font><font color="#0000BB">md5</font><font color="#007700">(</font><font color="#0000BB">$x</font><font color="#007700">), </font><font color="#0000BB">md5</font><font color="#007700">(</font><font color="#0000BB">$x</font><font color="#007700">*</font><font color="#0000BB">$x</font><font color="#007700">)), </font><font color="#DD0000">"<br />;"</font><font color="#007700">;<br /> }<br />}<br /><br /></font><font color="#FF8000">// Mostra os dados guardados no histórico<br /></font><font color="#0000BB">print_r</font><font color="#007700">(</font><font color="#0000BB">profile </font><font color="#007700">(</font><font color="#0000BB">TRUE</font><font color="#007700">));<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > 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. </P ><P > Ticks são idealizados para debug, implementação de multitask simples, processos de I/O em background e afins. </P ><P > Veja também: <A HREF="function.register-tick-function.html" ><B CLASS="function" >register_tick_function()</B ></A > e <A HREF="function.unregister-tick-function.html" ><B CLASS="function" >unregister_tick_function()</B ></A >. </P ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="control-structures.switch.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Principal</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="function.return.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><TT CLASS="literal" >switch</TT ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="language.control-structures.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >return</TD ></TR ></TABLE ></DIV ></BODY ></HTML >