<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >switch</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="continue" HREF="control-structures.continue.html"><LINK REL="NEXT" TITLE="declare" HREF="control-structures.declare.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.continue.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="control-structures.declare.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.switch" ><TT CLASS="literal" >switch</TT ></A ></H1 ><P > A instrução <TT CLASS="literal" >switch</TT > é similar a uma série de instruções IFs seguidas. Em muitas ocasiões, você poderá ter que comparar a mesma variável (ou expressão) com muitos valores diferentes, executando códigos diferentes dependendo com qual valor ele se encaixar. É exatamente para isso que a instrução <TT CLASS="literal" >switch</TT > faz. </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > Note que diferentemente de outras linguagens, a instrução <A HREF="control-structures.continue.html" >continue</A > se aplica a switch e age similarmente a um <TT CLASS="literal" >break</TT >. Se você tem um switch dentro de um loop e deseja continuar para a próxima iteração do loop, use <TT CLASS="literal" >continue 2</TT >. </P ></BLOCKQUOTE ></DIV ><P > Os exemplos seguintes mostram duas maneiras diferentes de escrever a mesma coisa, uma utilizando uma série de <TT CLASS="literal" >is</TT >s e <TT CLASS="literal" >elseif</TT >s e a outra utlizando a instrução <TT CLASS="literal" >switch</TT >: <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN4809" ></A ><P ><B >Exemplo 16-1. Estrutura <TT CLASS="literal" >switch</TT ></B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">if (</font><font color="#0000BB">$i </font><font color="#007700">== </font><font color="#0000BB">0</font><font color="#007700">) {<br /> echo </font><font color="#DD0000">"i igual a 0"</font><font color="#007700">;<br />} elseif (</font><font color="#0000BB">$i </font><font color="#007700">== </font><font color="#0000BB">1</font><font color="#007700">) {<br /> echo </font><font color="#DD0000">"i igual a 1"</font><font color="#007700">;<br />} elseif (</font><font color="#0000BB">$i </font><font color="#007700">== </font><font color="#0000BB">2</font><font color="#007700">) {<br /> echo </font><font color="#DD0000">"i igual a 2"</font><font color="#007700">;<br />}<br /><br />switch (</font><font color="#0000BB">$i</font><font color="#007700">) {<br /> case </font><font color="#0000BB">0</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 0"</font><font color="#007700">;<br /> break;<br /> case </font><font color="#0000BB">1</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 1"</font><font color="#007700">;<br /> break;<br /> case </font><font color="#0000BB">2</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 2"</font><font color="#007700">;<br /> break;<br />}<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN4813" ></A ><P ><B >Exemplo 16-2. <TT CLASS="literal" >switch</TT > structure allows usage of strings</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">switch (</font><font color="#0000BB">$i</font><font color="#007700">) {<br /> case </font><font color="#DD0000">"apple"</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i is apple"</font><font color="#007700">;<br /> break;<br /> case </font><font color="#DD0000">"bar"</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i is bar"</font><font color="#007700">;<br /> break;<br /> case </font><font color="#DD0000">"cake"</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i is cake"</font><font color="#007700">;<br /> break;<br /> }<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ><P > É importante entender como a instrução <TT CLASS="literal" >switch</TT > funciona para evitar enganos. A instrução <TT CLASS="literal" >switch</TT > executa linha a linha (atualmente, instrução a instrução). No início, nenhum código é executado. Somente quando uma instrução <TT CLASS="literal" >case</TT > é encontrada com um valor que combina com a expressão do <TT CLASS="literal" >switch</TT > faz com que o PHP execute as instruções a partir daí. O PHP continua executando as instruções até o fim do bloco <TT CLASS="literal" >switch</TT > ou na primeira vez que encontrar uma instrução <TT CLASS="literal" >break</TT >. Se você não escrever uma instrução <TT CLASS="literal" >break</TT > no fim das instruções <TT CLASS="literal" >case</TT >, o PHP continuará executando os <TT CLASS="literal" >case</TT >s seguintes. Exemplo: <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN4827" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">switch (</font><font color="#0000BB">$i</font><font color="#007700">) {<br /> case </font><font color="#0000BB">0</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 0"</font><font color="#007700">;<br /> case </font><font color="#0000BB">1</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 1"</font><font color="#007700">;<br /> case </font><font color="#0000BB">2</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 2"</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><P > Aqui, se <CODE CLASS="varname" >$i</CODE > é igual a zero, o PHP executará todas as instruções echo! Se <CODE CLASS="varname" >$i</CODE > é igual a 1, o PHP executará os últimas duas instruções echo, e somente se <CODE CLASS="varname" >$i</CODE > for igual a 2, você terá o comportamento 'esperado' apenas onde 'i igual a 2' será mostrado. Então é importante não se esquecer das instruções <TT CLASS="literal" >break</TT > (e as vezes não colocá-las para obter esse resultado em certas circunstâncias). </P ><P > Em uma instrução <TT CLASS="literal" >switch</TT >, a condição somente será avaliada e resultado comparado para cada instrução <TT CLASS="literal" >case</TT >. Em uma instrução <TT CLASS="literal" >elseif</TT >, a condição é avaliada novamente. Se sua condição é mais complicada que um simples comparação e/ou e dentro de um loop, um <TT CLASS="literal" >switch</TT > é mais rápido. </P ><P > Um case pode não ter nenhuma instrução dentro, o que simplesmente passa o controle para o próximo case. <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN4840" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">switch (</font><font color="#0000BB">$i</font><font color="#007700">) {<br /> case </font><font color="#0000BB">0</font><font color="#007700">:<br /> case </font><font color="#0000BB">1</font><font color="#007700">:<br /> case </font><font color="#0000BB">2</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i é menor que 3 mas não negativo"</font><font color="#007700">;<br /> break;<br /> case </font><font color="#0000BB">3</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i é 3"</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><P > Um case especial é o <TT CLASS="literal" >default</TT >. Esse case é executado quando nenhum outro case combina. Ele precisa ser a última instrução <TT CLASS="literal" >case</TT >. Por exemplo: <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN4845" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">switch (</font><font color="#0000BB">$i</font><font color="#007700">) {<br /> case </font><font color="#0000BB">0</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 0"</font><font color="#007700">;<br /> break;<br /> case </font><font color="#0000BB">1</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 1"</font><font color="#007700">;<br /> break;<br /> case </font><font color="#0000BB">2</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 2"</font><font color="#007700">;<br /> break;<br /> default:<br /> echo </font><font color="#DD0000">"i não é igual a 0, 1 ou 2"</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><P > A expressão avaliada pelo <TT CLASS="literal" >case</TT > precisa ser um tipo simples, ou seja, inteiros, números de ponto flutuante e strings. Arrays ou objetos não podem ser utilizados a não ser que eles impliquem num tipo simples. </P ><P > A sintaxe alternativa para estruturas de controle é suportada para os switches. Para maiores informações, veja <A HREF="control-structures.alternative-syntax.html" >Sintaxe alternativa para estruturas de controle</A >. <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN4851" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">switch (</font><font color="#0000BB">$i</font><font color="#007700">):<br /> case </font><font color="#0000BB">0</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 0"</font><font color="#007700">;<br /> break;<br /> case </font><font color="#0000BB">1</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 1"</font><font color="#007700">;<br /> break;<br /> case </font><font color="#0000BB">2</font><font color="#007700">:<br /> echo </font><font color="#DD0000">"i igual a 2"</font><font color="#007700">;<br /> break;<br /> default:<br /> echo </font><font color="#DD0000">"i não é igual a 0, 1 ou 2"</font><font color="#007700">;<br />endswitch;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ></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.continue.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="control-structures.declare.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><TT CLASS="literal" >continue</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" ><TT CLASS="literal" >declare</TT ></TD ></TR ></TABLE ></DIV ></BODY ></HTML >