<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Manipulação de tipos</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="Tipos" HREF="language.types.html"><LINK REL="PREVIOUS" TITLE="Pseudo-tipos utilizados nesta documentação" HREF="language.pseudo-types.html"><LINK REL="NEXT" TITLE="Variáveis" HREF="language.variables.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="language.pseudo-types.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Capítulo 11. Tipos</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="language.variables.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="language.types.type-juggling" >Manipulação de tipos</A ></H1 ><P > O PHP não requer (ou suporta) a definição de tipo explicita na declaração de variáveis: o tipo de uma variável é determinado pelo contexto em que a variável é utilizada. Isto significa que, se você assimila um valor string para a variável <CODE CLASS="parameter" >$var</CODE >, <CODE CLASS="parameter" >$var</CODE > se torna uma string. Se você então assimila um valor inteiro para <CODE CLASS="parameter" >$var</CODE >, ela se torna um inteiro. </P ><P > Um exemplo da conversão automática do PHP é o operador de adição '+'. Se qualquer um dos operadores for float, então todos os operadores são avaliados como floats, e o resultado será um float. De outra forma, se os operadores forem interpretados como inteiros então o resultado será um inteiro. Note que isso NÃO muda os tipos dos operadores: apenas muda em como esses operadores são avaliados. <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3535" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$foo </font><font color="#007700">= </font><font color="#DD0000">"0"</font><font color="#007700">; </font><font color="#FF8000">// $foo eh string (ASCII 48)<br /></font><font color="#0000BB">$foo </font><font color="#007700">+= </font><font color="#0000BB">2</font><font color="#007700">; </font><font color="#FF8000">// $foo eh agora um interio (2)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#0000BB">$foo </font><font color="#007700">+ </font><font color="#0000BB">1.3</font><font color="#007700">; </font><font color="#FF8000">// $foo eh agora um float (3.3)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#0000BB">5 </font><font color="#007700">+ </font><font color="#DD0000">"10 pequenos porcos"</font><font color="#007700">; </font><font color="#FF8000">// $foo eh inteiro (15)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#0000BB">5 </font><font color="#007700">+ </font><font color="#DD0000">"10 minúsculos porcos"</font><font color="#007700">; </font><font color="#FF8000">// $foo eh inteiro (15)<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><P > Se os últimos dois exemplos lhe parecerem estranhos, veja <A HREF="language.types.string.html#language.types.string.conversion" >Conversão de strings para números</A >. </P ><P > Se você deseja forçar uma variável para ser avaliada como um certo tipo, veja a seção <A HREF="language.types.type-juggling.html#language.types.typecasting" >Moldando o tipo (casting)</A >. Se você deseja mudar o tipo de uma variável, veja <A HREF="function.settype.html" ><B CLASS="function" >settype()</B ></A >. </P ><P > Se quiser testar qualquer um dos exemplo desta seção, você pode usar a função <A HREF="function.var-dump.html" ><B CLASS="function" >var_dump()</B ></A >. </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > O comportamento de uma conversão automática para array é atualmente indefinida. </P ><P > <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3547" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$a </font><font color="#007700">= </font><font color="#DD0000">"1"</font><font color="#007700">; </font><font color="#FF8000">// $a é uma string<br /></font><font color="#0000BB">$a</font><font color="#007700">[</font><font color="#0000BB">0</font><font color="#007700">] = </font><font color="#DD0000">"f"</font><font color="#007700">; </font><font color="#FF8000">// E com relação aos índices da string? O que acontece?<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><P > Desde que o PHP (por razões históricas) suporta indexação de strings através de offsets utilizando a mesma sintaxe da indexação de arrays, o exemplo acima nos deixa um problema: $a se tornou um array sendo o primeiro elemento "f", ou será que "f" se tornou o primeiro caracter da string $a ? </P ><P > As versões atuais do PHP interpretam a segunda assimilacao como identificação de deslocamento na string, então $a se torna "f", o resultado desta conversão automática entretanto pode ser considerada indefinida. O PHP 4 introduziu a nova sintaxe de chaves para acessar caracteres na string. Utilize esta sintaxe em vez do exemplo apresentado acima: <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3551" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$a </font><font color="#007700">= </font><font color="#DD0000">"abc"</font><font color="#007700">; </font><font color="#FF8000">// $a eh uma string<br /></font><font color="#0000BB">$a</font><font color="#007700">{</font><font color="#0000BB">1</font><font color="#007700">} = </font><font color="#DD0000">"f"</font><font color="#007700">; </font><font color="#FF8000">// $a eh agora "afc"<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > Veja a seção entitulada <A HREF="language.types.string.html#language.types.string.substr" >Acessando caracteres da string</A > para mais informações. </P ></BLOCKQUOTE ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="language.types.typecasting" >Moldando Tipos - Type Casting</A ></H2 ><P > A moldagem de tipos no PHP funciona como no C: o nome de um tipo desejado é escrito entre parênteses antes da variável em que se deseja a moldagem. <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3557" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$foo </font><font color="#007700">= </font><font color="#0000BB">10</font><font color="#007700">; </font><font color="#FF8000">// $foo eh um inteiro<br /></font><font color="#0000BB">$bar </font><font color="#007700">= (boolean) </font><font color="#0000BB">$foo</font><font color="#007700">; </font><font color="#FF8000">// $bar eh um booleano<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><P > As moldagens permitidas são: <P ></P ><UL ><LI ><P >(int), (integer) - molde para inteiro</P ></LI ><LI ><P >(bool), (boolean) - molde para booleano</P ></LI ><LI ><P >(float), (double), (real) - molde para número de ponto flutuante</P ></LI ><LI ><P >(string) - molde para string</P ></LI ><LI ><P >(array) - molde para array</P ></LI ><LI ><P >(object) - molde para objeto</P ></LI ></UL > </P ><P > Note que tabulações e espaços são permitidos dentro dos parênteses, então o seguinte são funcionalmente equivalentes: <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3574" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$foo </font><font color="#007700">= (int) </font><font color="#0000BB">$bar</font><font color="#007700">;<br /></font><font color="#0000BB">$foo </font><font color="#007700">= ( int ) </font><font color="#0000BB">$bar</font><font color="#007700">;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > Em vez de moldar uma variável para string, você também pode englobar a variável entre aspas duplas. <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3578" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$foo </font><font color="#007700">= </font><font color="#0000BB">10</font><font color="#007700">; </font><font color="#FF8000">// $foo eh um interio<br /></font><font color="#0000BB">$str </font><font color="#007700">= </font><font color="#DD0000">"$foo"</font><font color="#007700">; </font><font color="#FF8000">// $str eh uma string<br /></font><font color="#0000BB">$fst </font><font color="#007700">= (string) </font><font color="#0000BB">$foo</font><font color="#007700">; </font><font color="#FF8000">// $fst tambem eh uma string<br /><br />// Isto imprimirah "eles são o mesmo"<br /></font><font color="#007700">if (</font><font color="#0000BB">$fst </font><font color="#007700">=== </font><font color="#0000BB">$str</font><font color="#007700">) {<br /> echo </font><font color="#DD0000">"eles são o mesmo"</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ></BLOCKQUOTE ></DIV ><P > Pode não ser tão óbvio o que exatamente ocorre quando se molda entre certos tipos. Para mais informações, veja essas seções: <P ></P ><UL ><LI ><P ><A HREF="language.types.boolean.html#language.types.boolean.casting" >Convertendo para booleano</A ></P ></LI ><LI ><P ><A HREF="language.types.integer.html#language.types.integer.casting" >Convertendo para inteiro</A ></P ></LI ><LI ><P ><A HREF="language.types.float.html#language.types.float.casting" >Convertendo para float</A ></P ></LI ><LI ><P ><A HREF="language.types.string.html#language.types.string.casting" >Convertendo para string</A ></P ></LI ><LI ><P ><A HREF="language.types.array.html#language.types.array.casting" >Convertendo para array</A ></P ></LI ><LI ><P ><A HREF="language.types.object.html#language.types.object.casting" >Convertendo para object</A ></P ></LI ><LI ><P ><A HREF="language.types.resource.html#language.types.resource.casting" >Convertendo para resource</A ></P ></LI ><LI ><P > <A HREF="types.comparisons.html" >Tabela de comparação entre tipos</A > </P ></LI ></UL > </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="language.pseudo-types.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="language.variables.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Pseudo-tipos utilizados nesta documentação</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="language.types.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Variáveis</TD ></TR ></TABLE ></DIV ></BODY ></HTML >