<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Strings</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="Números de ponto flutuante" HREF="language.types.float.html"><LINK REL="NEXT" TITLE="Arrays" HREF="language.types.array.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.types.float.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.types.array.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.string" >Strings</A ></H1 ><P > Uma <A HREF="language.types.string.html" ><B CLASS="type" >string</B ></A > é uma série de caracteres. No PHP, um caracter é o mesmo que um byte, ou seja, há exatamente 256 caracteres diferentes possíveis. Isto implica que o PHP não tem suporte nativo ao Unicode. Veja <A HREF="function.utf8-encode.html" ><B CLASS="function" >utf8_encode()</B ></A > e <A HREF="function.utf8-decode.html" ><B CLASS="function" >utf8_decode()</B ></A > para suporte ao Unicode. </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > Não há nenhum problema nas strings se tornarem muito grandes. Não há nenhum limite para o tamanho de strings imposta pelo PHP, então não há razão para se preocupar com strings longas. </P ></BLOCKQUOTE ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="language.types.string.syntax" >Sintaxe</A ></H2 ><P > Uma string literal pode ser especificada de três formas diferentes. <P ></P ><UL ><LI ><P > <A HREF="language.types.string.html#language.types.string.syntax.single" >apóstrofo</A > </P ></LI ><LI ><P > <A HREF="language.types.string.html#language.types.string.syntax.double" >aspas</A > </P ></LI ><LI ><P > <A HREF="language.types.string.html#language.types.string.syntax.heredoc" >sintaxe heredoc</A > </P ></LI ></UL > </P ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="language.types.string.syntax.single" >Apóstrofos</A ></H3 ><P > A maneira mais simples para especificar uma string é delimitá-la entre apóstrofos (o caracter <TT CLASS="literal" >'</TT >). </P ><P > Para especificar um apóstrofo. você precisará "escapá-la" com uma contra barra (<TT CLASS="literal" >\</TT >), como em muitas outras linguagens. Se uma contra barra precisa ocorrer antes de um apóstrofo ou no final da string, você precisa duplicá-la. Note que se você tentar escapar qualquer outro caracter, a contra barra também será impressa! Então geralmente não é necessário escapar a própria contra barra. <DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > No PHP 3, um aviso com nível <TT CLASS="literal" >E_NOTICE</TT > será emitido quando isto acontecer. </P ></BLOCKQUOTE ></DIV > <DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > Diferentemente das duas outras sintaxes, <A HREF="language.variables.html" >variables</A > e seqüências de escape para caracteres especiais <SPAN CLASS="emphasis" ><I CLASS="emphasis" >não</I ></SPAN > serão substituídas quando elas ocorrerem dentro de strings delimitadas por apóstrofes. </P ></BLOCKQUOTE ></DIV > <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3040" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">echo </font><font color="#DD0000">'isto é uma string comum'</font><font color="#007700">;<br /><br />echo </font><font color="#DD0000">'Você pode incluir novas linhas em strings,<br />dessa maneira que estará<br />tudo bem'</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Imprime: Arnold disse uma vez: "I\'ll be back"<br /></font><font color="#007700">echo </font><font color="#DD0000">'Arnold once said: "I\'ll be back"'</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Imprime: Você tem certeza em apagar C:\*.*?<br /></font><font color="#007700">echo </font><font color="#DD0000">'Você tem certeza em apagar C:\\*.*?'</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Imprime: Você tem certeza em apagar C:\*.*?<br /></font><font color="#007700">echo </font><font color="#DD0000">'Você tem certeza em apagar C:\*.*?'</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Imprime: Isto não será substituido: \n uma nova linha<br /></font><font color="#007700">echo </font><font color="#DD0000">'Isto não será substituido: \n uma nova linha'</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Imprime: Variaveis $também não $expandem<br /></font><font color="#007700">echo </font><font color="#DD0000">'Variaveis $também não $expandem'</font><font color="#007700">;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ></DIV ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="language.types.string.syntax.double" >Aspas</A ></H3 ><P > Se a string é delimitada entre aspas ("), o PHP entende mais seqüências de escape para caracteres especiais: </P ><DIV CLASS="table" ><A NAME="AEN3045" ></A ><P ><B >Tabela 11-1. Seqüências de escape</B ></P ><TABLE BORDER="1" CLASS="CALSTABLE" ><COL><COL><THEAD ><TR ><TH >Seqüência</TH ><TH >Significado</TH ></TR ></THEAD ><TBODY ><TR ><TD ><TT CLASS="literal" >\n</TT ></TD ><TD >fim de linha (linefeed ou LF ou 0x0A (10) em ASCII)</TD ></TR ><TR ><TD ><TT CLASS="literal" >\r</TT ></TD ><TD >retorno de carro (carriage return ou CR ou 0x0D (13) em ASCII)</TD ></TR ><TR ><TD ><TT CLASS="literal" >\t</TT ></TD ><TD >TAB horizontal (HT ou 0x09 (9) em ASCII)</TD ></TR ><TR ><TD ><TT CLASS="literal" >\\</TT ></TD ><TD >contra barra ou barra invertida</TD ></TR ><TR ><TD ><TT CLASS="literal" >\$</TT ></TD ><TD >sinal de cifrão</TD ></TR ><TR ><TD ><TT CLASS="literal" >\"</TT ></TD ><TD >aspas</TD ></TR ><TR ><TD ><TT CLASS="literal" >\[0-7]{1,3}</TT ></TD ><TD > a seqüência de caracteres batendo a expressão regular dos caracteres em notação octal </TD ></TR ><TR ><TD ><TT CLASS="literal" >\x[0-9A-Fa-f]{1,2}</TT ></TD ><TD > a seqüência de caracteres batendo a expressão regular de um caracter em notação hexadecimal </TD ></TR ></TBODY ></TABLE ></DIV ><P > Novamente se você tentar escapar qualquer outro caracter, a contra barra será impressa também! </P ><P > Mas o mais importante recurso de strings delimitadas por aspas está no fato de que nome de variáveis serão substituídos. Veja <A HREF="language.types.string.html#language.types.string.parsing" >interpretação de strings</A > para detalhes. </P ></DIV ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="language.types.string.syntax.heredoc" >Heredoc</A ></H3 ><P > Outra maneira para delimitar strings é utilizando a sintaxe heredoc ("<<<"). É informado um identificador depois de <TT CLASS="literal" ><<<</TT >, então a string, e então o mesmo identificador para fechar a delimitação. </P ><P > O identificador de fechamento <SPAN CLASS="emphasis" ><I CLASS="emphasis" >precisa</I ></SPAN > começar na primeira coluna da linha. Além, o identificador utilizado precisa seguir as mesmas regras de nomeação que qualquer outro rótulo no PHP: só pode conter caracteres alfanuméricos e sublinhados, e precisa começar com um caracter não numérico ou sublinhado. </P ><DIV CLASS="warning" ><P ></P ><TABLE CLASS="warning" BORDER="1" WIDTH="100%" ><TR ><TD ALIGN="CENTER" ><B >Atenção</B ></TD ></TR ><TR ><TD ALIGN="LEFT" ><P > É muito importante verificar que a linha do identificador de fechamento não contenha nenhum outro caracter, exceto, <SPAN CLASS="emphasis" ><I CLASS="emphasis" >possivelmente</I ></SPAN > um ponto e vírgula (<TT CLASS="literal" >;</TT >). O que significa que o identificador <SPAN CLASS="emphasis" ><I CLASS="emphasis" >não pode ser indentado</I ></SPAN >, e que não pode haver nenhum espaço ou tabulações antes ou depois do ponto e vírgula. É também importante perceber que o primeiro caracter antes do identificador de fechamento precisa ser um caracter de nova linha como esperada por seu sistema operacional. Por exemplo, <TT CLASS="literal" >\r</TT > em sistemas Macintosh. </P ><P > Se essa regra for quebrada e o identificador de fechamento não estiver perfeito, então ele não será considerado como identificador de fechamento e o PHP irá continuar procurando por um. Se, neste caso, um identificador de fechamento apropriado não for encontrado, então um erro de interpretação (parse) será lançado na linha final do script. </P ></TD ></TR ></TABLE ></DIV ><P > Textos heredoc se comportam como strings delimitadas por aspas, com apenas uma diferença. Você não precisa escapar apóstrofos e aspas em seus heredocs, mas você ainda pode continuar utilizando os códigos de escape listados acima. Variáveis são substituídas, mas o mesmo cuidado precisa ser tomado quando expressando variáveis complexas dentro de heredocs assim como nas strings. <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN3102" ></A ><P ><B >Exemplo 11-2. Exemplo de delimitação de strings heredoc</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$str </font><font color="#007700">= <<<EOD<br /></font><font color="#0000BB">Exemplo de uma string<br />distribuída em várias linhas<br />utilizando a sintaxe heredoc.<br /></font><font color="#007700">EOD;<br /><br /></font><font color="#FF8000">/* Exemplo mais complexo, com variáveis */<br /></font><font color="#007700">class </font><font color="#0000BB">foo<br /></font><font color="#007700">{<br /> var </font><font color="#0000BB">$foo</font><font color="#007700">;<br /> var </font><font color="#0000BB">$bar</font><font color="#007700">;<br /><br /> function </font><font color="#0000BB">foo</font><font color="#007700">()<br /> {<br /> </font><font color="#0000BB">$this</font><font color="#007700">-></font><font color="#0000BB">foo </font><font color="#007700">= </font><font color="#DD0000">'Foo'</font><font color="#007700">;<br /> </font><font color="#0000BB">$this</font><font color="#007700">-></font><font color="#0000BB">bar </font><font color="#007700">= array(</font><font color="#DD0000">'Bar1'</font><font color="#007700">, </font><font color="#DD0000">'Bar2'</font><font color="#007700">, </font><font color="#DD0000">'Bar3'</font><font color="#007700">);<br /> }<br />}<br /><br /></font><font color="#0000BB">$foo </font><font color="#007700">= new </font><font color="#0000BB">foo</font><font color="#007700">();<br /></font><font color="#0000BB">$name </font><font color="#007700">= </font><font color="#DD0000">'Meu nome'</font><font color="#007700">;<br /><br />echo <<<EOT<br /></font><font color="#0000BB">Meu nome é "$name". Eu estou imprimindo $foo</font><font color="#007700">-></font><font color="#0000BB">foo.<br />Agora, eu estou imprimindo </font><font color="#007700">{</font><font color="#0000BB">$foo</font><font color="#007700">-></font><font color="#0000BB">bar</font><font color="#007700">[</font><font color="#0000BB">1</font><font color="#007700">]}</font><font color="#0000BB">.<br />Isto deve imprimir um 'A' maiúsculo: </font><font color="#007700">\x41</font><font color="#0000BB"><br /></font><font color="#007700">EOT;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > O suporte a heredoc foi acrescentado no PHP 4. </P ></BLOCKQUOTE ></DIV ></DIV ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="language.types.string.parsing" >Interpretação de variáveis</A ></H3 ><P > Quando uma string é especificada dentro de aspas ou heredoc, <A HREF="language.variables.html" >variáveis</A > são interpretadas dentro delas. </P ><P > Há dois tipos de sintaxe: um <A HREF="language.types.string.html#language.types.string.parsing.simple" >simples</A > e um <A HREF="language.types.string.html#language.types.string.parsing.complex" >complexo</A > . A sintaxe simples é a mais comum e conveniente, provendo uma maneira de interpretar uma variável, um valor de <A HREF="language.types.array.html" ><B CLASS="type" >array</B ></A > ou uma propriedade de object. </P ><P > A sintaxe completa foi introduzida no PHP 4, e pode ser reconhecida por chaves ({}) envolvendo a expressão. </P ><DIV CLASS="sect4" ><H4 CLASS="sect4" ><A NAME="language.types.string.parsing.simple" >Sintaxe simples</A ></H4 ><P > Se um sinal de cifrão (<TT CLASS="literal" >$</TT >) é encontrado, o interpretador tentará obter tantos identificadores quanto possíveis para formar um nome de variável válido. Envolva o nome da variável com chaves se você deseja explicitamente especificar o fim do nome. </P ><DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3121" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$cerveja </font><font color="#007700">= </font><font color="#DD0000">'Heineken'</font><font color="#007700">;<br />echo </font><font color="#DD0000">"O sabor das '$cerveja's é otimo"</font><font color="#007700">; </font><font color="#FF8000">// funciona, "'" é um caracter inválido para nome de variáveis<br /></font><font color="#007700">echo </font><font color="#DD0000">"Ele bebeu algumas $cervejas"</font><font color="#007700">; </font><font color="#FF8000">// não funciona, 's' é um caracter válido para nome de variáveis<br /></font><font color="#007700">echo </font><font color="#DD0000">"Ele bebeu algumas </font><font color="#007700">${</font><font color="#DD0000">cerveja</font><font color="#007700">}</font><font color="#DD0000">s"</font><font color="#007700">; </font><font color="#FF8000">// funciona<br /></font><font color="#007700">echo </font><font color="#DD0000">"Ele bebeu algumas </font><font color="#007700">{</font><font color="#DD0000">$cerveja</font><font color="#007700">}</font><font color="#DD0000">s"</font><font color="#007700">; </font><font color="#FF8000">// funciona<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV ><P > Similarmente, você também pode interpretar um índice de <A HREF="language.types.array.html" ><B CLASS="type" >array</B ></A > ou uma propriedade de objeto. Com índices de arrays, o colchete de fechamento (<TT CLASS="literal" >]</TT >) marca o final do índice. Para propriedades de objetos se aplicam as mesmas regras das variáveis comuns, embora não exista um truque para as propriedades de objetos como para as variáveis. </P ><DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3127" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">// Esses exemplos são específicos para utilização de arrays dentro de strings<br />// Quando fora de strings, sempre delimite suas chaves de array strings<br />// e nao use {colchetes} fora das strings tambem.<br /><br />// Vamos ver todos os erros<br /></font><font color="#0000BB">error_reporting</font><font color="#007700">(</font><font color="#0000BB">E_ALL</font><font color="#007700">);<br /><br /></font><font color="#0000BB">$fruits </font><font color="#007700">= array(</font><font color="#DD0000">'morango' </font><font color="#007700">=> </font><font color="#DD0000">'vermelho'</font><font color="#007700">, </font><font color="#DD0000">'banana' </font><font color="#007700">=> </font><font color="#DD0000">'amarelo'</font><font color="#007700">);<br /><br /></font><font color="#FF8000">// Funciona, mas note que funciona de maneira diferente fora dos delimitadores de strings<br /></font><font color="#007700">echo </font><font color="#DD0000">"A banana é $fruits</font><font color="#007700">[</font><font color="#DD0000">banana</font><font color="#007700">]</font><font color="#DD0000">."</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Funciona<br /></font><font color="#007700">echo </font><font color="#DD0000">"A banana é </font><font color="#007700">{</font><font color="#DD0000">$fruits</font><font color="#007700">[</font><font color="#DD0000">'banana'</font><font color="#007700">]}</font><font color="#DD0000">."</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Funciona, mas o PHP procura por uma constante chamada 'banana' antes,<br />// como descrito a seguir<br /></font><font color="#007700">echo </font><font color="#DD0000">"A banana é </font><font color="#007700">{</font><font color="#DD0000">$fruits</font><font color="#007700">[</font><font color="#DD0000">banana</font><font color="#007700">]}</font><font color="#DD0000">."</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Nao funciona, use colchetes. Isto lanca um parse error.<br /></font><font color="#007700">echo </font><font color="#DD0000">"A banana é $fruits</font><font color="#007700">[</font><font color="#DD0000">'banana'</font><font color="#007700">]</font><font color="#DD0000">."</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Funciona<br /></font><font color="#007700">echo </font><font color="#DD0000">"A banana é " </font><font color="#007700">. </font><font color="#0000BB">$fruits</font><font color="#007700">[</font><font color="#DD0000">'banana'</font><font color="#007700">] . </font><font color="#DD0000">"."</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Funciona<br /></font><font color="#007700">echo </font><font color="#DD0000">"Este quadrado tem $square</font><font color="#007700">-></font><font color="#DD0000">width metros de lado."</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Nao funciona. Para uma solução, veja a sintaxe complexa.<br /></font><font color="#007700">echo </font><font color="#DD0000">"Este quadrado tem $square</font><font color="#007700">-></font><font color="#DD0000">width00 centímetros de lado."</font><font color="#007700">;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV ><P > Para qualquer coisa mais complexa, você precisa utilizar a sintaxe complexa. </P ></DIV ><DIV CLASS="sect4" ><H4 CLASS="sect4" ><A NAME="language.types.string.parsing.complex" >Sintaxe complexa (chaves)</A ></H4 ><P > Isto não é chamado sintaxe complexa porque a sintaxe em si é complexa, mas porque você pode incluir expressões complexas desta maneira. </P ><P > De fato, você pode incluir qualquer valor no que esteja no espaço de nomes dentro de strings com esta sintaxe. Você simplesmente escreve a expressão da mesma maneira que faria fora da string, e então incluí-la entre chaves. Desde que você não pode escapar '{', esta sintaxe somente será reconhecida quando o $ é imediatamente seguido de um {. (Utilize "{\$" ou "\{$" para obter um literal "{$"). Alguns exemplos para tornar isso mais claro: </P ><DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3134" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">// Vamos ver todos os erros<br /></font><font color="#0000BB">error_reporting</font><font color="#007700">(</font><font color="#0000BB">E_ALL</font><font color="#007700">);<br /><br /></font><font color="#0000BB">$bom </font><font color="#007700">= </font><font color="#DD0000">'fantastico'</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Não funciona, imprimindo: Isto é { fantastico}<br /></font><font color="#007700">echo </font><font color="#DD0000">"Isto é </font><font color="#007700">{</font><font color="#DD0000"> $bom</font><font color="#007700">}</font><font color="#DD0000">"</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Funciona, imprimindo: Isto é fantástico<br /></font><font color="#007700">echo </font><font color="#DD0000">"Isto é </font><font color="#007700">{</font><font color="#DD0000">$bom</font><font color="#007700">}</font><font color="#DD0000">"</font><font color="#007700">;<br />echo </font><font color="#DD0000">"Isto é </font><font color="#007700">${</font><font color="#DD0000">bom</font><font color="#007700">}</font><font color="#DD0000">"</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Funciona<br /></font><font color="#007700">echo </font><font color="#DD0000">"Este quadrado tem </font><font color="#007700">{</font><font color="#DD0000">$square</font><font color="#007700">-></font><font color="#DD0000">width</font><font color="#007700">}</font><font color="#DD0000">00 centímetros de lado."</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Funciona<br /></font><font color="#007700">echo </font><font color="#DD0000">"Isto funciona: </font><font color="#007700">{</font><font color="#DD0000">$arr</font><font color="#007700">[</font><font color="#DD0000">4</font><font color="#007700">][</font><font color="#DD0000">3</font><font color="#007700">]}</font><font color="#DD0000">"</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Isto está errado pela mesma razao que $foo[bar] eh errado<br />// fora de uma string. Em outras palavras, isto ainda funciona MAS<br />// porque o PHP primeiro procura pro uma constante nomeada foo, e ele<br />// lancara um erro do tipo E_NOTICE (undefined constant).<br /></font><font color="#007700">echo </font><font color="#DD0000">"Isto é errado: </font><font color="#007700">{</font><font color="#DD0000">$arr</font><font color="#007700">[</font><font color="#DD0000">foo</font><font color="#007700">][</font><font color="#DD0000">3</font><font color="#007700">]}</font><font color="#DD0000">"</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Funciona. Quanto mexendo com arrays multi dimensionais, sempre use<br />// colchetes em volta dos arrays quando detro de strings<br /></font><font color="#007700">echo </font><font color="#DD0000">"Isto funciona: </font><font color="#007700">{</font><font color="#DD0000">$arr</font><font color="#007700">[</font><font color="#DD0000">'foo'</font><font color="#007700">][</font><font color="#DD0000">3</font><font color="#007700">]}</font><font color="#DD0000">"</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// Funciona<br /></font><font color="#007700">echo </font><font color="#DD0000">"Isto funciona: " </font><font color="#007700">. </font><font color="#0000BB">$arr</font><font color="#007700">[</font><font color="#DD0000">'foo'</font><font color="#007700">][</font><font color="#0000BB">3</font><font color="#007700">];<br /><br />echo </font><font color="#DD0000">"Você pode escrever também </font><font color="#007700">{</font><font color="#DD0000">$obj</font><font color="#007700">-></font><font color="#DD0000">values</font><font color="#007700">[</font><font color="#DD0000">3</font><font color="#007700">]-></font><font color="#DD0000">name</font><font color="#007700">}</font><font color="#DD0000">"</font><font color="#007700">;<br /><br />echo </font><font color="#DD0000">"Este é o valor da variável chamada $name: </font><font color="#007700">{${</font><font color="#DD0000">$name</font><font color="#007700">}}</font><font color="#DD0000">"</font><font color="#007700">;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV ></DIV ></DIV ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="language.types.string.substr" >Acesso e modificação de caracteres da string</A ></H3 ><P > Caracteres nas strings podem ser acessados e modificados apenas especificando o deslocamento baseado em zero do caracter desejado depois da string dentro de chaves. </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > Para manter a compatibilidade, você ainda pode usar colchetes de array para o mesmo propósito. Entretanto, esse sintaxe é obsoleta desde o PHP 4. </P ></BLOCKQUOTE ></DIV ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN3142" ></A ><P ><B >Exemplo 11-3. Alguns exemplos com strings</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">// Pega o primeiro caracter da string<br /></font><font color="#0000BB">$str </font><font color="#007700">= </font><font color="#DD0000">'Isto é um teste.'</font><font color="#007700">;<br /></font><font color="#0000BB">$first </font><font color="#007700">= </font><font color="#0000BB">$str</font><font color="#007700">{</font><font color="#0000BB">0</font><font color="#007700">};<br /><br /></font><font color="#FF8000">// Pega o terceiro caracter da string<br /></font><font color="#0000BB">$third </font><font color="#007700">= </font><font color="#0000BB">$str</font><font color="#007700">{</font><font color="#0000BB">2</font><font color="#007700">};<br /><br /></font><font color="#FF8000">// Pega o último caracter da string<br /></font><font color="#0000BB">$str </font><font color="#007700">= </font><font color="#DD0000">'Isto ainda é um teste.'</font><font color="#007700">;<br /></font><font color="#0000BB">$last </font><font color="#007700">= </font><font color="#0000BB">$str</font><font color="#007700">{</font><font color="#0000BB">strlen</font><font color="#007700">(</font><font color="#0000BB">$str</font><font color="#007700">)-</font><font color="#0000BB">1</font><font color="#007700">};<br /><br /></font><font color="#FF8000">// Modifica o ultimo caracter da string<br /></font><font color="#0000BB">$str </font><font color="#007700">= </font><font color="#DD0000">'Olhe o mal'</font><font color="#007700">;<br /></font><font color="#0000BB">$str</font><font color="#007700">{</font><font color="#0000BB">strlen</font><font color="#007700">(</font><font color="#0000BB">$str</font><font color="#007700">)-</font><font color="#0000BB">1</font><font color="#007700">} = </font><font color="#DD0000">'r'</font><font color="#007700">;<br /><br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ></DIV ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="language.types.string.useful-funcs" >Funções e operadores úteis</A ></H2 ><P > Strings podem ser concatenados utilizando o operador '.' (ponto). Note que o operador '+' (adição) não funciona para isso. Veja <A HREF="language.operators.string.html" >operadores de string</A > para mais informações. </P ><P > Há uma grande quantidade de funções úteis para modificação de strings. </P ><P > Veja a seção de <A HREF="ref.strings.html" >funções de string</A > para funções gerais e funções de expressões regulares para busca e substituição avançada.(em dois sabores: <A HREF="ref.pcre.html" >Perl</A > e <A HREF="ref.regex.html" >POSIX estendido</A >). </P ><P > Há também <A HREF="ref.url.html" >funções para strings URL</A > e funções para criptografia e descriptografia de strings (<A HREF="ref.mcrypt.html" >mcrypt</A > e <A HREF="ref.mhash.html" >mhash</A >). </P ><P > Finalmente, se você ainda não encontrar o que está procurando, veja também as <A HREF="ref.ctype.html" >funções de tipos de caracteres</A >. </P ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="language.types.string.casting" >Convertendo para strings</A ></H2 ><P > Você pode converter um valor para string utilizando o molde <TT CLASS="literal" >(string)</TT >, ou a função <A HREF="function.strval.html" ><B CLASS="function" >strval()</B ></A >. Conversão para string é automaticamente realizada no escopo de uma expressão para você onde uma string é necessária. Isto acontece quando você usa as funções <A HREF="function.echo.html" ><B CLASS="function" >echo()</B ></A > ou <A HREF="function.print.html" ><B CLASS="function" >print()</B ></A >, ou quando você compara o valor de uma variável com uma string. Lendo as seções do manual sobre <A HREF="language.types.html" >Tipos</A > e <A HREF="language.types.type-juggling.html" >Conversão de Tipos</A > tornará o que se segue um pouco mais claro. Veja também <A HREF="function.settype.html" ><B CLASS="function" >settype()</B ></A >. </P ><P > O valor <A HREF="language.types.boolean.html" ><B CLASS="type" >boolean</B ></A > <TT CLASS="constant" ><B >TRUE</B ></TT > é convertido para a string <TT CLASS="literal" >"1"</TT >, o valor <TT CLASS="constant" ><B >FALSE</B ></TT > é representado como <TT CLASS="literal" >""</TT > (string vazia). Desta forma, você pode converter livremente entre os tipos booleano e string. </P ><P > Um <A HREF="language.types.integer.html" ><B CLASS="type" >integer</B ></A > ou número de ponto flutuante (<A HREF="language.types.float.html" ><B CLASS="type" >float</B ></A >) é convertido para a representação string do número em dígitos arábicos (incluindo a parte expoente para números de ponto flutuante). </P ><P > Arrays são sempre convertidos para a string <TT CLASS="literal" >"Array"</TT >, então você não pode exportar o conteúdo de um <A HREF="language.types.array.html" ><B CLASS="type" >array</B ></A > com <A HREF="function.echo.html" ><B CLASS="function" >echo()</B ></A > ou <A HREF="function.print.html" ><B CLASS="function" >print()</B ></A > para ver o que há dentro dela. Para ver um elemento, você precisa fazer algo como <TT CLASS="literal" > echo $arr['foo']</TT >. Veja abaixo dicas de como exportar/ver todo seu conteúdo. </P ><P > Objetos são sempre convertidos para a string <TT CLASS="literal" >"Object"</TT >. Se você quiser imprimir os valores das variáveis membro de um <A HREF="language.types.object.html" ><B CLASS="type" >object</B ></A > por razão de debug, leia os parágrafos abaixo. Se você quiser encontrar o nome da classe do qual o objeto é uma instância, use <A HREF="function.get-class.html" ><B CLASS="function" >get_class()</B ></A >. </P ><P > Recursos são sempre convertidos para strings na estrutura <TT CLASS="literal" >"Resource id #1"</TT > onde <TT CLASS="literal" >1</TT > é o número único do <A HREF="language.types.resource.html" ><B CLASS="type" >resource</B ></A > assimilado pelo PHP na execução. Se você quiser obter o tipo do recurso, utilize <A HREF="function.get-resource-type.html" ><B CLASS="function" >get_resource_type()</B ></A >. </P ><P > <TT CLASS="constant" ><B >NULL</B ></TT > é sempre convertido para uma string vazia. </P ><P > Como você viu acima, imprimir arrays, objetos ou recursos não fornece qualquer informação útil sobre os seus próprios valores. Veja as funções <A HREF="function.print-r.html" ><B CLASS="function" >print_r()</B ></A > e <A HREF="function.var-dump.html" ><B CLASS="function" >var_dump()</B ></A > para melhores maneiras de imprimir valores para debug. </P ><P > Você também pode converter valores PHP para strings para armazená-los permanentemente. Este método é chamado serialização, e pode ser feito com a função <A HREF="function.serialize.html" ><B CLASS="function" >serialize()</B ></A >. Você também pode serializar valores PHP para estruturas XML , se você ativou o suporte a <A HREF="ref.wddx.html" >WDDX</A > na configuração do seu PHP. </P ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="language.types.string.conversion" >Conversão de strings para números</A ></H2 ><P > Quando uma string é avaliada como um valor numérico, o valor resultante e o tipo é determinado como segue. </P ><P > A string será avaliada como um ponto flutuante se conter qualquer um dos caracteres '.', 'e', ou 'E'. Em outros casos, ela será avaliada como um inteiro. </P ><P > O valor é obtido da porção inicial da string. Se a string começa com dados numéricos válidos, esse será o valor utilizado. Em outro caso, o valor será 0 (zero). Dados numéricos válidos são: um sinal opcional, seguido por um ou mais dígitos (opcionalmente contendo um ponto decimal), seguido de um expoente, também opcional. O expoente é um 'e' ou 'E' seguido de um ou mais dígitos. </P ><DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3208" ></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">1 </font><font color="#007700">+ </font><font color="#DD0000">"10.5"</font><font color="#007700">; </font><font color="#FF8000">// $foo é float (11.5)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#0000BB">1 </font><font color="#007700">+ </font><font color="#DD0000">"-1.3e3"</font><font color="#007700">; </font><font color="#FF8000">// $foo é float (-1299)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#0000BB">1 </font><font color="#007700">+ </font><font color="#DD0000">"bob-1.3e3"</font><font color="#007700">; </font><font color="#FF8000">// $foo é integer (1)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#0000BB">1 </font><font color="#007700">+ </font><font color="#DD0000">"bob3"</font><font color="#007700">; </font><font color="#FF8000">// $foo é integer (1)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#0000BB">1 </font><font color="#007700">+ </font><font color="#DD0000">"10 Small Pigs"</font><font color="#007700">; </font><font color="#FF8000">// $foo é integer (11)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#0000BB">4 </font><font color="#007700">+ </font><font color="#DD0000">"10.2 Little Piggies"</font><font color="#007700">; </font><font color="#FF8000">// $foo é float (14.2)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#DD0000">"10.0 pigs " </font><font color="#007700">+ </font><font color="#0000BB">1</font><font color="#007700">; </font><font color="#FF8000">// $foo é float (11)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#DD0000">"10.0 pigs " </font><font color="#007700">+ </font><font color="#0000BB">1.0</font><font color="#007700">; </font><font color="#FF8000">// $foo é float (11)<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV ><P > Para mais informações sobre esta conversão, veja página do manual UNIX de strtod(3). </P ><P > Se você deseja testar qualquer um dos exemplo dessa seção, você pode copiar e colar os exemplos e inserir as linhas seguintes para ver por si mesmo como isso funciona. <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3212" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">echo </font><font color="#DD0000">"</font><font color="#007700">\$</font><font color="#DD0000">foo==$foo; tipo " </font><font color="#007700">. </font><font color="#0000BB">gettype </font><font color="#007700">(</font><font color="#0000BB">$foo</font><font color="#007700">) . </font><font color="#DD0000">"<br />\n"</font><font color="#007700">;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><P > Não espere obter o código de um caracter por convertê-lo para inteiro (como você teria em C, por exemplo). Use as funções <A HREF="function.ord.html" ><B CLASS="function" >ord()</B ></A > e <A HREF="function.chr.html" ><B CLASS="function" >chr()</B ></A > para converter entre código de caracteres e os próprios caracteres. </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.types.float.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.types.array.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Números de ponto flutuante</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" >Arrays</TD ></TR ></TABLE ></DIV ></BODY ></HTML >