<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.types.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'language.types.string.php',
    1 => 'Strings',
    2 => 'Strings',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => 'Tipos',
  ),
  'prev' => 
  array (
    0 => 'language.types.float.php',
    1 => 'N&uacute;meros de ponto flutuante',
  ),
  'next' => 
  array (
    0 => 'language.types.numeric-strings.php',
    1 => 'Strings num&eacute;ricas',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'language/types/string.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.types.string" class="sect1">
 <h2 class="title">Strings</h2>

 <p class="para">
  Uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> é uma série de caracteres, onde um caractere é
  o mesmo que um byte. Isso significa que o PHP possui suporte a um conjunto de apenas 256 caracteres,
  e, portanto, não possui suporte nativo a Unicode. Veja mais
  <a href="language.types.string.php#language.types.string.details" class="link"> detalhes do tipo
  string</a>.
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <span class="simpara">
   Em sistemas de 32 bits, uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> pode ter até 2GB
   (2147483647 bytes).
  </span>
 </p></blockquote>

 <div class="sect2" id="language.types.string.syntax">
  <h3 class="title">Sintaxe</h3>

  <p class="para">
   Uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> literal pode ser especificada de quatro formas diferentes.
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.single" class="link">aspas simples</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.double" class="link">aspas duplas</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">sintaxe heredoc</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.nowdoc" class="link">sintaxe nowdoc</a>
    </span>
   </li>
  </ul>

  <div class="sect3" id="language.types.string.syntax.single">
   <h4 class="title">Aspas simples</h4>

   <p class="para">
    A maneira mais simples de se especificar uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> é
    delimitá-la entre aspas simples (o caractere <code class="literal">&#039;</code>).
   </p>

   <p class="para">
    Para especificar um apóstrofo, escape-o com uma contrabarra
    (<code class="literal">\</code>). Para especificar uma contrabarra literal, duplique-a
    (<code class="literal">\\</code>). Todas as outras ocorrências da contrabarra serão tratadas
    como uma contrabarra literal: isso significa que outras sequências de escape que
    se esteja acostumado a utilizar, como <code class="literal">\r</code> ou <code class="literal">\n</code>, serão
    literalmente impressas em vez de ter qualquer significado
    especial.
   </p>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Diferentemente das sintaxes <a href="language.types.string.php#language.types.string.syntax.double" class="link">com aspas duplas</a>
     e <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">heredoc</a>,
     <a href="language.variables.php" class="link">variáveis</a> e sequências de escape
     para caracteres especiais <em>não</em> serão expandidas quando ocorrerem
     dentro de uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> delimitada por aspas simples.
    </span>
   </p></blockquote>

   <div class="example" id="example-1">
    <p><strong>Exemplo #1 Variantes de sintaxe</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'isto é uma string comum'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">'Você pode incluir novas linhas em strings<br />dessa maneira que estará<br />tudo bem'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Exibe: Arnold disse uma vez: "I'll be back"<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Arnold disse uma vez: "I\'ll be back"'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Exibe: Você excluiu C:\*.*?<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Você excluiu C:\\*.*?'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Exibe: Você excluiu C:\*.*?<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Você excluiu C:\*.*?'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Exibe: Isto não será substituído por \n uma nova linha<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Isto não será substituído por \n uma nova linha'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Exibe: Variáveis $também não $expandem<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Variáveis $também não $expandem'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  </div>

  <div class="sect3" id="language.types.string.syntax.double">
   <h4 class="title">Aspas duplas</h4>

   <p class="para">
    Se a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> for delimitada entre aspas duplas (<code class="literal">&quot;</code>), o PHP
    interpretará a seguinte sequência de escape como caracteres especiais:
   </p>

   <table class="doctable table">
    <caption><strong>Sequências de escape</strong></caption>

    
     <thead>
      <tr>
       <th>Sequências</th>
       <th>Significado</th>
      </tr>

     </thead>


     <tbody class="tbody">
      <tr>
       <td><code class="literal">\n</code></td>
       <td>Nova linha (LF ou 0x0A (10) em ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\r</code></td>
       <td>Retorno de carro (CR ou 0x0D (13) em ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\t</code></td>
       <td>Tabulação horizontal (HT ou 0x09 (9) em ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\v</code></td>
       <td>Tabulação vertical (VT ou 0x0B (11) em ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\e</code></td>
       <td>Escape (ESC ou 0x1B (27) em ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\f</code></td>
       <td>Form feed (FF ou 0x0C (12) em ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\\</code></td>
       <td>contrabarra ou barra invertida</td>
      </tr>

      <tr>
       <td><code class="literal">\$</code></td>
       <td>Sinal de cifrão</td>
      </tr>

      <tr>
       <td><code class="literal">\&quot;</code></td>
       <td>aspas duplas</td>
      </tr>

      <tr>
       <td><code class="literal">\[0-7]{1,3}</code></td>
       <td>
        Octal: uma sequência de caracteres que coincide com a expressão regular <code class="literal">[0-7]{1,3}</code>
        é um caractere em notação octal (por exemplo, <code class="literal">&quot;\101&quot; === &quot;A&quot;</code>),
        o qual é silenciosamente turcado para um byte (por exemplo <code class="literal">&quot;\400&quot; === &quot;\000&quot;</code>)
       </td>
      </tr>

      <tr>
       <td><code class="literal">\x[0-9A-Fa-f]{1,2}</code></td>
       <td>
        Hexadecimal: uma sequência de caracteres que coincide com a expressão regular
        <code class="literal">[0-9A-Fa-f]{1,2}</code> é um caractere em notação decimal
        (por exemplo, <code class="literal">&quot;\x41&quot; === &quot;A&quot;</code>)
       </td>
      </tr>

      <tr>
       <td><code class="literal">\u{[0-9A-Fa-f]+}</code></td>
       <td>
        Unicode: uma sequência de caracteres coincidindo com a expressão regular <code class="literal">[0-9A-Fa-f]+</code>
        é um codepoint Unicode, o qual terá como resultado uma string contendo a representação UTF-8 desses codepoints.
        Os colchetes são requeridos. Por exemplo, <code class="literal">&quot;\u{41}&quot; === &quot;A&quot;</code>
       </td>
      </tr>

     </tbody>
    
   </table>


   <p class="para">
    Como com as <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s entre aspas simples, escapar qualquer outro caractere
    resultará em uma contrabarra sendo impressa.
   </p>

   <p class="para">
    O recurso mais importante de <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s delimitadas por aspas duplas é o fato de que
    nomes de variáveis serão expandidos. Veja a
    <a href="language.types.string.php#language.types.string.parsing" class="link">interpolação de strings</a> para
    detalhes.
   </p>
  </div>

  <div class="sect3" id="language.types.string.syntax.heredoc">
   <h4 class="title">Heredoc</h4>

   <p class="simpara">
    Uma terceira maneira de delimitar <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s é a sintaxe heredoc:
    <code class="literal">&lt;&lt;&lt;</code>. Após este operador, um identificador é
    fornecido seguido de uma nova linha. A própria <span class="type"><a href="language.types.string.php" class="type string">string</a></span> é colocada em seguida e a seguir
    o mesmo identificador novamente para fechar a string.
   </p>

   <p class="simpara">
    O identificador de fechamento pode ser indentado com espaços ou tabulações, e nesse caso
    a indentação será removida de todas as linhas da doc string.
    Anteriormente ao PHP 7.3.0, o identificador <em>precisava</em>
    estar no começo da linha.
   </p>

   <p class="simpara">
    Além disso, o identificador de fechamento precisa seguir as mesmas convenções de nomes
    de outros identificadores do PHP: ele precisa conter apenas caracteres alfanuméricos e
    underlines, e precisa começar com uma letra ou underline.
   </p>

   <div class="example" id="example-2">
    <p><strong>Exemplo #2 Exemplo Heredoc simples no PHP 7.3.0</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Sem indentação<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">      a<br />     b<br />    c<br />\n<br /></span><span style="color: #007700">END;<br /><br /></span><span style="color: #FF8000">// 4 espaços de indentação<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">      a<br />     b<br />    c<br /></span><span style="color: #007700">    END;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Saída do exemplo acima no PHP 7.3:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
      a
     b
    c

  a
 b
c
</pre></div>
    </div>
   </div>

   <p class="simpara">
    Se o identificador de fechamento estiver identado diferentemente das linhas do corpo, um <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> será lançado:
   </p>

   <div class="example" id="example-3">
    <p><strong>Exemplo #3 Identificador de fechamento indentado diferente das linhas do corpo</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">  a<br /> b<br />c<br /></span><span style="color: #007700">   END;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Saída do exemplo acima no PHP 7.3:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: Invalid body indentation level (expecting an indentation level of at least 3) in example.php on line 4
</pre></div>
    </div>
   </div>

   <p class="simpara">
    Se o identificador de fechamento é identado, tabulações podem ser utilizadas, no entanto
    tabulações e espaços <em>não podem</em> estar misturados ou diferentes,
    entre a indentação do fechamento e a indentação do corpo
     Nesses casos, um <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> será lançado.

    Essas restrições de whitespace estão incluídas dados que a mistura de tabulações
    e espaços são prejudiciais à legibilidade.
   </p>

   <div class="example" id="example-4">
    <p><strong>Exemplo #4 Indentação diferente entre corpo e fechamento</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Todos esses códidos falharão.<br /><br />// Indentação diferente entre corpo (espaços) e fechamento (tabulações)<br /></span><span style="color: #007700">{<br />echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br /></span><span style="color: #007700">END;<br />}<br /><br /></span><span style="color: #FF8000">// Misturar tabulações e espaços no corpo<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">    a<br /></span><span style="color: #007700">     END;<br />}<br /><br /></span><span style="color: #FF8000">// Misturar espaços e tabulações no identificador de fechamento<br /></span><span style="color: #007700">{<br />echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br /></span><span style="color: #007700">END;<br />}</span></span></code></div>
    </div>

    <div class="example-contents"><p>Saída do exemplo acima no PHP 7.3:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: Invalid indentation - tabs and spaces cannot be mixed in example.php line 8
</pre></div>
    </div>
   </div>

   <p class="simpara">
    O identificador de fechamento do corpo não necessita de um
    ponto e vírgula ou nova linha. Por exemplo, o seguinte código
    é permitido a partir do PHP7.3.0:
   </p>

   <div class="example" id="example-5">
    <p><strong>Exemplo #5 Continuando uma expressão após o identificador de fechamento</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$values </span><span style="color: #007700">= [&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br />  b<br />    c<br /></span><span style="color: #007700">END, </span><span style="color: #DD0000">'d e f'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$values</span><span style="color: #007700">);</span></span></code></div>
    </div>

    <div class="example-contents"><p>Saída do exemplo acima no PHP 7.3:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(2) {
  [0] =&gt;
  string(11) &quot;a
  b
    c&quot;
  [1] =&gt;
  string(5) &quot;d e f&quot;
}
</pre></div>
    </div>
   </div>

   <div class="warning"><strong class="warning">Aviso</strong>
    <p class="simpara">
     Se o identificador de fechamento for encontrado no começo da linha, existe
     a ambiguidade de ele ser considerado ou não parte do texto, podendo
     também ser considerado como fechamento, pode causar um <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>.
    </p>

    <div class="example" id="example-6">
     <p><strong>Exemplo #6 Identificador de fechamento no corpo da string pode causar um ParseError</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$values </span><span style="color: #007700">= [&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br />b<br /></span><span style="color: #007700">END </span><span style="color: #0000BB">ING<br />END</span><span style="color: #007700">, </span><span style="color: #DD0000">'d e f'</span><span style="color: #007700">];</span></span></code></div>
     </div>

     <div class="example-contents"><p>Saída do exemplo acima no PHP 7.3:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: syntax error, unexpected identifier &quot;ING&quot;, expecting &quot;]&quot; in example.php on line 5
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Para evitar esse problema, basta seguir a seguinte regra:
     <em>escolha identificadores que não aparecem no corpo
     do texto</em>.
    </p>

   </div>

   <div class="warning"><strong class="warning">Aviso</strong>
    <p class="simpara">
     Anteriormente ao PHP 7.3.0, era muito importante notar que a linha com
     o identificador de fechamento não poderia conter outros caracteres, exceto um ponto e vírgula
     (<code class="literal">;</code>).
     Isso significava que o identificador de fechamento
     <em>não poderia ser identado</em>, e que não poderia haver espaços
     ou tabulações antes ou depois do ponto e vírgula. É importante notar também que
     o primeiro caractere antes do fechamento deveria ser uma newline, como
     definido pelo sistema operacional. Ou seja, <code class="literal">\n</code> em
     sistemas Unix, incluindo o macOS. O identificador de fechamento também
     deveria ser seguido de um newline.
    </p>

    <p class="simpara">
     Se essa regra não for seguida, e o identificador de fechamento não estiver &quot;limpo&quot;, ele
     não será considerado como fechamento, e o PHP continuará lendo o script como se fosse
     texto. Se um identificador de fechamento correto não for encontrado até o final do
     arquivo, um erro de interpretação será lançado na última linha.
    </p>

    <div class="example" id="example-7">
     <p><strong>Exemplo #7 Exemplo inválido, antes do PHP 7.3.0</strong></p>
     <div class="example-contents">
      
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">    EOT;<br />}<br /></span><span style="color: #FF8000">// O identificador não deve ser indentado<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <div class="example" id="example-8">
     <p><strong>Exemplo #8 Exemplo válido, mesmo antes do PHP 7.3.0</strong></p>
     <div class="example-contents">
      
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">EOT;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

    <p class="para">
     Heredocs não podem ser usados para inicializar propriedades de classe.
    </p>

   </div>

   <p class="para">
    Textos heredoc se comportam como <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s delimitadas por aspas duplas, sem
    as aspas duplas. Isso significa que aspas simples em heredocs não precisam ser
    escapadas, apesar de que os códigos de escape listados acima podem continuar sendo utilizados. Variáveis
    são expandidas, mas o mesmo cuidado deve ser tomado ao expressar variáveis complexas
    dentro do heredoc assim como nas <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s.
   </p>

   <div class="example" id="example-9">
    <p><strong>Exemplo #9 Exemplo de delimitação de strings heredoc</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$str </span><span style="color: #007700">= &lt;&lt;&lt;EOD<br /></span><span style="color: #DD0000">Exemplo de uma string<br />distribuída em várias linhas<br />utilizando a sintaxe heredoc.<br /></span><span style="color: #007700">EOD;<br /><br /></span><span style="color: #FF8000">/* Exemplo mais complexo, com variáveis */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    var </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br />    var </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /><br />    function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Foo'</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'Bar1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar3'</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'Meu nome'</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">Meu nome é "</span><span style="color: #0000BB">$name</span><span style="color: #DD0000">". Eu estou imprimindo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo</span><span style="color: #DD0000">.<br />Agora, eu estou imprimindo </span><span style="color: #007700">{</span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]}</span><span style="color: #DD0000">.<br />Isto deve imprimir um 'A' maiúsculo: \x41<br /></span><span style="color: #007700">EOT;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Meu nome é &quot;Meu nome&quot;. Eu estou imprimindo Foo.
Agora, eu estou imprimindo Bar2.
Isto deve imprimir um &#039;A&#039; maiúsculo: A</pre></div>
    </div>
   </div>

   <p class="para">
    É possível também utilizar a sintaxe Heredoc para passar dados para argumentos de
    funções:
   </p>

   <div class="example" id="example-10">
    <p><strong>Exemplo #10 Exemplo de Heredoc em argumentos</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(array(&lt;&lt;&lt;EOD<br /></span><span style="color: #DD0000">foobar!<br /></span><span style="color: #007700">EOD<br />));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    É possível inicializar variáveis estáticas e
    propriedades/constantes de classe utilizando a sintaxe heredoc:
   </p>

   <div class="example" id="example-11">
    <p><strong>Exemplo #11 Utilizando o Heredoc na inicialização de valores estáticos</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Variáveis estáticas<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />{<br />    static </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;LABEL<br /></span><span style="color: #DD0000">Nada aqui...<br /></span><span style="color: #007700">LABEL;<br />}<br /><br /></span><span style="color: #FF8000">// Classe propriedades/constantes<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    const </span><span style="color: #0000BB">BAR </span><span style="color: #007700">= &lt;&lt;&lt;FOOBAR<br /></span><span style="color: #DD0000">Exemplo de constante<br /></span><span style="color: #007700">FOOBAR;<br /><br />    public </span><span style="color: #0000BB">$baz </span><span style="color: #007700">= &lt;&lt;&lt;FOOBAR<br /></span><span style="color: #DD0000">Exemplo de propriedade<br /></span><span style="color: #007700">FOOBAR;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    O identificador de abertura do Heredoc pode ser opcionalmente
    delimitado por aspas duplas:
   </p>

   <div class="example" id="example-12">
    <p><strong>Exemplo #12 Usando aspas duplas no Heredoc</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;"FOOBAR"<br /></span><span style="color: #DD0000">Olá, mundo!<br /></span><span style="color: #007700">FOOBAR;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  </div>

  <div class="sect3" id="language.types.string.syntax.nowdoc">
   <h4 class="title">Nowdoc</h4>

   <p class="para">
    Nowdocs estão para aspas simples assim como os heredocs estão para aspas duplas em
    strings. Um nowdoc é especificado similarmente a um heredoc, mas <em>
    nenhuma interpolação é feita</em> dentro de um nowdoc. A construção é ideal para
    colocar códigos PHP ou outros grandes blocos de texto sem a necessidade de
    usar escapes. Compartilha algumas características em comum com a construção SGML
    <code class="literal">&lt;![CDATA[ ]]&gt;</code>, assim é declarado um bloco de
    texto onde nada será analisado.
   </p>

   <p class="para">
    Um nowdoc é identificado com a mesma sequência <code class="literal">&lt;&lt;&lt;</code>
    usada para heredocs, mas o identificador precisa ficar entre
    aspas simples, por exemplo. <code class="literal">&lt;&lt;&lt;&#039;EOT&#039;</code>. Todas as regras para
    identificadores heredoc também se aplicam para identificadores nowdoc, especialmente aquelas
    referentes a aparência do identificador de fechamento.
   </p>

   <div class="example" id="example-13">
    <p><strong>Exemplo #13 Exemplo de string em Nowdoc</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;'EOD'<br /></span><span style="color: #DD0000">Exemplo de string abrangendo várias linhas<br />usando a sintaxe nowdoc. As barras invertidas são sempre tratadas literalmente,<br />por exemplo. \\ e \'.<br /></span><span style="color: #007700">EOD;</span></span></code></div>
    </div>

    <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Exemplo de string abrangendo várias linhas
usando a sintaxe nowdoc. As barras invertidas são sempre tratadas literalmente,
por exemplo. \\ e \&#039;.
</pre></div>
    </div>
   </div>

   <div class="example" id="example-14">
    <p><strong>Exemplo #14 Exemplo de Nowdoc, com variáveis</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /><br />    function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Foo'</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'Bar1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar3'</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'MyName'</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;'EOT'<br /></span><span style="color: #DD0000">Meu nome é "$nome". Estou imprimindo alguns $foo-&gt;foo.<br />Agora, estou imprimindo alguns {$foo-&gt;bar[1]}.<br />Isso não deve imprimir um 'A' maiúsculo: \x41<br /></span><span style="color: #007700">EOT;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Meu nome é &quot;$nome&quot;. Estou imprimindo alguns $foo-&gt;foo.
Agora, estou imprimindo alguns {$foo-&gt;bar[1]}.
Isso não deve imprimir um &#039;A&#039; maiúsculo: \x41</pre></div>
    </div>
   </div>

   <div class="example" id="example-15">
    <p><strong>Exemplo #15 Exemplo de dado estático</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;'EOT'<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">EOT;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  </div>

  <div class="sect3" id="language.types.string.parsing">
   <h4 class="title">Interpolação de strings</h4>

   <p class="simpara">
    Quando uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> é especificada dentro de aspas duplas ou heredoc,
    as <a href="language.variables.php" class="link">variáveis</a> podem ser substituídas dentro dela.
   </p>

   <p class="simpara">
    Há dois tipos de sintaxe: uma
    <a href="language.types.string.php#language.types.string.parsing.basic" class="link">básica</a> e uma
    <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">avançada</a>.
    A sintaxe básica é a mais comum e conveniente. Provê uma maneira de
    incorporar uma variável, o valor de um <span class="type"><a href="language.types.array.php" class="type array">array</a></span> ou uma propriedade de <span class="type"><a href="language.types.object.php" class="type object">object</a></span>
    em uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> com o mínimo de esforço.
   </p>

   <div class="sect4" id="language.types.string.parsing.basic">
    <h5 class="title">Sintaxe básica</h5>
    <p class="simpara">
     Se um sinal de cifrão (<code class="literal">$</code>) for encontrado, os caracteres
     que o seguem, e que podem ser usados em nome de variável, serão interpretados
     como tal e substituídos.
    </p>
    <div class="example" id="example-16">
     <p><strong>Exemplo #16 Interpolação de string</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$suco </span><span style="color: #007700">= </span><span style="color: #DD0000">"maçã"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Ele bebeu um pouco de suco de </span><span style="color: #0000BB">$suco</span><span style="color: #DD0000">." </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Ele bebeu um pouco de suco de maçã.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Formalmente, a estrutura para a sintaxe básica de substituição de variável é
     o seguinte:
    </p>
    <div class="informalexample">
     <div class="example-contents">
<div class="annotation-interactive cdata"><pre>
string-variável::
     nome-de-variável   (posição-ou-propriedade)?
   | ${   expressão   }

posição-ou-propriedade::
     posição-na-string
   | propriedade-na-string

posição-na-string::
     [   nome   ]
   | [   nome-de-variável   ]
   | [   inteiro-literal   ]

propriedade-na-string::
     -&gt;  nome

nome-de-variável::
     $   nome

nome::
     [a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*

</pre></div>
     </div>

    </div>

    <div class="warning"><strong class="warning">Aviso</strong>
     <p class="para">
      A sintaxe <code class="literal">${ expressão }</code> foi descontinuada a partir do
      PHP 8.2.0, já que pode ser interpretada como
      <a href="language.variables.variable.php" class="link">variáveis variáveis</a>:
      <div class="informalexample">
       <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"</span><span style="color: #007700">${</span><span style="color: #0000BB">foo</span><span style="color: #007700">}</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"</span><span style="color: #007700">${(</span><span style="color: #0000BB">foo</span><span style="color: #007700">)}</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
       </div>

       <p class="para">Saída do exemplo acima no PHP 8.2:</p>
       <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in file on line 6

Deprecated: Using ${expr} (variable variables) in strings is deprecated, use {${expr}} instead in file on line 9
string(3) &quot;foo&quot;
string(3) &quot;bar&quot;
</pre></div>
       </div>
       <p class="para">O exemplo acima produzirá:</p>
       <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
string(3) &quot;foo&quot;
string(3) &quot;bar&quot;
</pre></div>
       </div>
      </div>
      A sintaxe <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">avançada</a>
      de interpolação de string deve ser usada em seu lugar.
     </p>
    </div>

    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      Se não for possível formar um nome válido, o símbolo de cifrão permanece
      literalmente na string:
     </span>
     <div class="informalexample">
      <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Nenhuma interpolação $ aconteceu\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Nenhuma interpolação $\n aconteceu\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Nenhuma interpolação $2 aconteceu\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <p class="para">O exemplo acima produzirá:</p>
      <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Nenhuma interpolação $ aconteceu
Nenhuma interpolação $
 aconteceu
Nenhuma interpolação $2 aconteceu
</pre></div>
      </div>
     </div>
    </p></blockquote>

    <div class="example" id="example-17">
     <p><strong>Exemplo #17 Interpolando o valor da primeira dimensão de um array ou propriedade</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$sucos </span><span style="color: #007700">= array(</span><span style="color: #DD0000">"maça"</span><span style="color: #007700">, </span><span style="color: #DD0000">"laranja"</span><span style="color: #007700">, </span><span style="color: #DD0000">"chave_string" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"roxo"</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Ele bebeu um pouco de suco de </span><span style="color: #0000BB">$sucos</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]</span><span style="color: #DD0000">."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Ele bebeu um pouco de suco de </span><span style="color: #0000BB">$sucos</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]</span><span style="color: #DD0000">."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Ele bebeu um pouco de suco de </span><span style="color: #0000BB">$sucos</span><span style="color: #007700">[</span><span style="color: #0000BB">chave_string</span><span style="color: #007700">]</span><span style="color: #DD0000">."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$s </span><span style="color: #007700">= </span><span style="color: #DD0000">"string"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">();<br /><br />echo </span><span style="color: #DD0000">"Valor do objeto: </span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">s</span><span style="color: #DD0000">."</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Ele bebeu um pouco de suco de maçã.
Ele bebeu um pouco de suco de laranja.
Ele bebeu um pouco de suco de roxo.
Valor do objeto: string.
</pre></div>
     </div>
    </div>

    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      A chave do array deve ser sem aspas, e por isso não é possível
      referenciar uma constante como chave com a sintaxe básica. Use a sintaxe
      <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">avançada</a>
      em seu lugar.
     </span>
    </p></blockquote>

    <p class="simpara">
     A partir do PHP 7.1.0 índices numéricos <em>negativos</em> são
     suportados.
    </p>

    <div class="example" id="example-18"><p><strong>Exemplo #18 Índices numéricos negativos</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$string </span><span style="color: #007700">= </span><span style="color: #DD0000">'string'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"O caractere no índice -2 é </span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">2</span><span style="color: #007700">]</span><span style="color: #DD0000">."</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">3</span><span style="color: #007700">] = </span><span style="color: #DD0000">'o'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Alterar o caractere no índice -3 para 'o' dá </span><span style="color: #0000BB">$string</span><span style="color: #DD0000">."</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
O caractere no índice -2 é n.
Alterar o caractere no índice -3 para o dá strong.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Para qualquer coisa mais complexa, a sintaxe
     <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">avançada</a>
     deve ser usada.
    </p>
   </div>

   <div class="sect4" id="language.types.string.parsing.advanced">
    <h5 class="title">Sintaxe avançada (com chaves)</h5>

    <p class="simpara">
     A sintaxe avançada permite a interpolação de
     <em>variáveis</em> com acessadores arbitrários.
    </p>

    <p class="simpara">
     Qualquer variável escalar, elemento de array ou propriedade de objeto
     (<span class="modifier">static</span> ou não) com uma
     representação de uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> pode ser incluída com essa sintaxe.
     A expressão é escrita da mesma forma como apareceria fora da
     <span class="type"><a href="language.types.string.php" class="type string">string</a></span> e então coloque-o entre <code class="literal">{</code> e
     <code class="literal">}</code>. Já que que <code class="literal">{</code> não pode escapado, esta
     sintaxe será somente reconhecida quando o <code class="literal">$</code> seguir,
     imediatamente, o <code class="literal">{</code>. Use <code class="literal">{\$</code> para obter um literal
     <code class="literal">{$</code>. Alguns exemplos que tornam isto claro:
    </p>

    <div class="example" id="example-19">
     <p><strong>Exemplo #19 Sintaxe com chaves</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">DATA_KEY </span><span style="color: #007700">= </span><span style="color: #DD0000">'chave-const'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$fantastico </span><span style="color: #007700">= </span><span style="color: #DD0000">'fantástico'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= [<br />    </span><span style="color: #DD0000">'1'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'2'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'3'</span><span style="color: #007700">,<br />    [</span><span style="color: #0000BB">41</span><span style="color: #007700">, </span><span style="color: #0000BB">42</span><span style="color: #007700">, </span><span style="color: #0000BB">43</span><span style="color: #007700">],<br />    </span><span style="color: #DD0000">'chave' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Valor indexado'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'chave-const' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Chave com sinal de menos'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'foo' </span><span style="color: #007700">=&gt; [</span><span style="color: #DD0000">'foo1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'foo2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'foo3'</span><span style="color: #007700">]<br />];<br /><br /></span><span style="color: #FF8000">// Não vai funcionar, resultado: Isso é { fantástico}<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Isso é { </span><span style="color: #0000BB">$fantastico</span><span style="color: #DD0000">}" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Funciona, resultado: Isso é fantástico<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Isso é </span><span style="color: #007700">{</span><span style="color: #0000BB">$fantastico</span><span style="color: #007700">}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Para mostrar chaves na saída:<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Isso é {</span><span style="color: #007700">{</span><span style="color: #0000BB">$fantastico</span><span style="color: #007700">}</span><span style="color: #DD0000">}" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">Square </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$width</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">int $width</span><span style="color: #007700">) { </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">width </span><span style="color: #007700">= </span><span style="color: #0000BB">$width</span><span style="color: #007700">; }<br />}<br /><br /></span><span style="color: #0000BB">$square </span><span style="color: #007700">= new </span><span style="color: #0000BB">Square</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Funciona<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Este quadrado tem </span><span style="color: #007700">{</span><span style="color: #0000BB">$square</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">width</span><span style="color: #007700">}</span><span style="color: #DD0000">00 centímetros de largura." </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">// Funciona, as chaves entre aspas funcionam apenas usando a sintaxe de chaves<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Isso funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'chave'</span><span style="color: #007700">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">// Funciona<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Isso funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">][</span><span style="color: #0000BB">2</span><span style="color: #007700">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Isso funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">DATA_KEY</span><span style="color: #007700">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Ao usar arrays multidimensionais, sempre use chaves em torno dos arrays<br />// quando dentro de strings<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">][</span><span style="color: #0000BB">2</span><span style="color: #007700">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">values</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">]-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$staticProp</span><span style="color: #007700">}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Não funciona, imprime: C:\diretório\{fantástico}.txt<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"C:\diretório\{</span><span style="color: #0000BB">$fantastico</span><span style="color: #DD0000">}.txt" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Funciona, imprime: C:\diretório\fantástico.txt<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"C:\\diretório\\</span><span style="color: #007700">{</span><span style="color: #0000BB">$fantastico</span><span style="color: #007700">}</span><span style="color: #DD0000">.txt" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      Como esta sintaxe permite expressões arbitrárias, é possível usar
      <a href="language.variables.variable.php" class="link">variáveis variáveis</a>
      dentro da sintaxe avançada.
     </span>
    </p></blockquote>
   </div>
  </div>

  <div class="sect3" id="language.types.string.substr">
   <h4 class="title">Acesso e modificação da string por caractere</h4>

   <p class="para">
    É possível acessar e modificar caracteres dentro de <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s
    especificando a posição, baseada em zero, do caractere desejado na
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span> usando colchetes, parecido com <span class="type"><a href="language.types.array.php" class="type array">array</a></span>s, por exemplo
    <var class="varname">$str[42]</var>. Imagine uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> como um
    <span class="type"><a href="language.types.array.php" class="type array">array</a></span> de caracteres. As funções
    <span class="function"><a href="function.substr.php" class="function">substr()</a></span> e <span class="function"><a href="function.substr-replace.php" class="function">substr_replace()</a></span>,
    podem ser utilizadas quando se deseja extrair ou substituir mais que 1 caractere.
   </p>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     A partir do PHP 7.1.0, posições negativas para strings são suportadas. Estas especificam
     a posição do final da string.
     Antes, posições negativas emitiam um <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> para leitura
     (gerando um string vazia) e um <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> para escrita
     (deixando a string intocada).
    </span>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Anteriormente ao PHP 8.0.0, <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s também poderiam ser usados utilizando chaves, por exemplo
     <var class="varname">$str{42}</var>.
     Essa sintaxe por chaves foi descontinuada desde o PHP 7.4.0 e não é mais suportada a partir do PHP 8.0.0.
    </span>
   </p></blockquote>

   <div class="warning"><strong class="warning">Aviso</strong>
    <p class="simpara">
     Escrever em uma posição fora do intervalo preenche a string com espaços.
     Tipos diferentes de inteiro são convertidos para inteiro.
     Tipo ilegal de deslocamento emite um <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
     Apenas o primeiro caractere de uma string atribuída é usado.
     A partir de PHP 7.1.0, a atribuição de uma string vazia lança um erro fatal. Antes,
     era atribuído o byte NULL.
    </p>
   </div>

   <div class="warning"><strong class="warning">Aviso</strong>
    <p class="simpara">
     Internamente, as strings do PHP são arrays de bytes. Como resultado, acessar ou
     modificar uma string usando colchetes não é seguro com multi-bytes e
     deve ser feito somente em strings que utilizem apenas um byte em sua codificação,
     como a ISO-8859-1.
    </p>
   </div>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     A partir do PHP 7.1.0, aplicar um operador de índice vazio em uma string lança um erro fatal
     Antes, a string vazia era convertida em um array.
    </span>
   </p></blockquote>

   <div class="example" id="example-20">
    <p><strong>Exemplo #20 Alguns exemplos com strings</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Obtém o primeiro caractere de uma string<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Isto é um teste.'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$first </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$first</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Obtém o terceiro caractere de uma string<br /></span><span style="color: #0000BB">$third </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$third</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Obtém o último caractere de uma string<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Isto ainda é um teste.'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$last </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)-</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$last</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Modifica o último caractere de uma string<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Olhe para a onda'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)-</span><span style="color: #0000BB">1</span><span style="color: #007700">] = </span><span style="color: #DD0000">'e'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Índices de strings devem ser inteiros ou strings parecidos com inteiros,
    de outra forma um aviso é lançado.
   </p>

   <div class="example" id="example-21">
    <p><strong>Exemplo #21 Exemplo de índices inválidos em strings</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'abc'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$keys </span><span style="color: #007700">= [ </span><span style="color: #DD0000">'1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'1.0'</span><span style="color: #007700">, </span><span style="color: #DD0000">'x'</span><span style="color: #007700">, </span><span style="color: #DD0000">'1x' </span><span style="color: #007700">];<br /><br />foreach (</span><span style="color: #0000BB">$keys </span><span style="color: #007700">as </span><span style="color: #0000BB">$keyToTry</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(isset(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">$keyToTry</span><span style="color: #007700">]));<br /><br />    try {<br />        </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">$keyToTry</span><span style="color: #007700">]);<br />    } catch (</span><span style="color: #0000BB">TypeError $e</span><span style="color: #007700">) {<br />        echo </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />    }<br /><br />    echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
bool(true)
string(1) &quot;b&quot;

bool(false)
Cannot access offset of type string on string

bool(false)
Cannot access offset of type string on string

bool(false)

Warning: Illegal string offset &quot;1x&quot; in Standard input code on line 10
string(1) &quot;b&quot;
</pre></div>
    </div>
   </div>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="para">
     Acessar variáveis de outros tipos (excluindo-se arrays ou objetos que
     implementem certas interfaces) usando <code class="literal">[]</code> ou
     <code class="literal">{}</code> silenciosamente retornará <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="para">
     Caracteres dentro de strings literais podem ser acessados
     utilizando <code class="literal">[]</code> ou <code class="literal">{}</code>.
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="para">
     Acessar caracteres em strings utilizando a sintax por
     <code class="literal">{}</code> foi descontinuada desde o PHP 7.4,
     e não existe no PHP 8.0.
    </p>
   </p></blockquote>
  </div>
 </div>

 <div class="sect2" id="language.types.string.useful-funcs">
  <h3 class="title">Funções e operadores úteis</h3>

  <p class="para">
   <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s podem ser concatenadas utilizando o operador &#039;.&#039; (ponto). Note
   que o operador &#039;+&#039; (adição) <em>não</em> funciona para isso.
   Veja <a href="language.operators.string.php" class="link">operadores de string</a> para
   mais informações.
  </p>

  <p class="para">
   Há bastantes funções úteis para manipulação de <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s.
  </p>

  <p class="simpara">
   Veja a <a href="ref.strings.php" class="link">seção de funções de string</a> para
   funções gerais e <a href="ref.pcre.php" class="link">funções de expressões regulares compatíveis com Perl</a>
   para funcionalidades avançadas de localização &amp; e substituição.
  </p>

  <p class="simpara">
   Há também <a href="ref.url.php" class="link">funções para strings URL</a> e
   funções para criptografia/descriptografia de strings
   (<a href="ref.sodium.php" class="link">Sodium</a> e
   <a href="ref.hash.php" class="link">Hash</a>).
  </p>

  <p class="simpara">
   Finalmente, veja também as <a href="ref.ctype.php" class="link">funções de tipos de
   caracteres</a>.
  </p>
 </div>

 <div class="sect2" id="language.types.string.casting">
  <h3 class="title">Conversão em strings</h3>

  <p class="para">
   Um valor pode ser convertido em uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> utilizando o modificador
   <code class="literal">(string)</code> ou a função <span class="function"><a href="function.strval.php" class="function">strval()</a></span>.
   A conversão em <span class="type"><a href="language.types.string.php" class="type string">string</a></span> é automaticamente realizada no escopo de uma
   expressão onde uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> é necessária. Isto acontece no uso das funções
   <span class="function"><a href="function.echo.php" class="function">echo</a></span> ou <span class="function"><a href="function.print.php" class="function">print</a></span> ou quando
   o valor de uma variável é comparado com uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span>. As seções <a href="language.types.php" class="link">Tipos</a> e <a href="language.types.type-juggling.php" class="link">Conversão de Tipos</a> tornarão
   um pouco mais claro o assunto. Veja também a função <span class="function"><a href="function.settype.php" class="function">settype()</a></span>.
  </p>

  <p class="para">
   O valor <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> é convertido para a <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   <code class="literal">&quot;1&quot;</code>. O <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> é convertido para
   <code class="literal">&quot;&quot;</code> (uma string vazia). Isso permite converter nos dois
   sentidos entre os valores <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> e <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
  </p>

  <p class="para">
   Um <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> ou um <span class="type"><a href="language.types.float.php" class="type float">float</a></span> é convertido para uma
   <span class="type"><a href="language.types.string.php" class="type string">string</a></span> representando o número textualmente (incluindo a parte
   do expoente nos <span class="type"><a href="language.types.float.php" class="type float">float</a></span>s). Números de ponto flutuante podem ser
   convertidos usando a notação exponencial (<code class="literal">4.1E+6</code>).
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    A partir do PHP 8.0.0, o caractere de separação de decimais sempre é
    um ponto (&quot;<code class="literal">.</code>&quot;). Anteriormente ao PHP 8.0.0,
    o separador de decimais era definido pela localidade do script
    (LC_NUMERIC). Veja mais detalhes na função <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span>.
   </p>
  </p></blockquote>

  <p class="para">
   <span class="type"><a href="language.types.array.php" class="type Array">Array</a></span>s são sempre convertidos para uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   <code class="literal">&quot;Array&quot;</code>; por isso <span class="function"><a href="function.echo.php" class="function">echo</a></span> e
   <span class="function"><a href="function.print.php" class="function">print</a></span> não podem, por si só, mostrar o conteúdo de um
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. Para visualizar um único elemento, use uma construção como
   <code class="literal">echo $arr[&#039;foo&#039;]</code>. Veja abaixo dicas de como visualizar todo seu
   conteúdo.
  </p>

  <p class="para">
   Para converter <span class="type"><a href="language.types.object.php" class="type object">object</a></span>s em <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s, o método
   mágico <a href="language.oop5.magic.php" class="link">__toString</a> deve ser usado.
  </p>

  <p class="para">
   <span class="type"><a href="language.types.resource.php" class="type Resource">Resource</a></span>s são sempre convertidos para <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s na
   estrutura <code class="literal">&quot;Resource id #1&quot;</code> onde <code class="literal">1</code> é
   o número único do <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> atribuído pelo PHP
   em tempo de execução. Apesar de que a estrutura exata desta string não seja confiável
   e esteja sujeita a modificações, será sempre única a um dado recurso
   dentro do ciclo de vida de um script sendo executado (por exemplo, em uma requisição Web ou em um processo
   CLI) e não será reutilizada. Para obter o tipo de um <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>, utilize
   a função <span class="function"><a href="function.get-resource-type.php" class="function">get_resource_type()</a></span>.
  </p>

  <p class="para">
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> é sempre convertido para uma string vazia.
  </p>

  <p class="para">
   Como declarado acima, converter diretamente um <span class="type"><a href="language.types.array.php" class="type array">array</a></span>,
   <span class="type"><a href="language.types.object.php" class="type object">object</a></span> ou <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> para uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> não
   fornece nenhuma informação útil sobre o valor, a não ser seu tipo. Veja as
   funções <span class="function"><a href="function.print-r.php" class="function">print_r()</a></span> e <span class="function"><a href="function.var-dump.php" class="function">var_dump()</a></span>
   para maneiras mais efetivas de inspecionar o conteúdo destes tipos.
  </p>

  <p class="para">
   A maioria dos valores no PHP também podem ser convertidos em <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s para armazenamento
   permanente. Este método é chamado de serialização e pode ser feito com a função
   <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span>.
  </p>

 </div>

 <div class="sect2" id="language.types.string.details">

  <h3 class="title">Detalhes do tipo string</h3>

  <p class="para">
   A <span class="type"><a href="language.types.string.php" class="type string">string</a></span> no PHP é implementada como um array de bytes e um
   inteiro indicando seu tamanho no buffer. Não existem informações de como
   esses bytes são traduzidos em caracteres, ficando essa tarefa com o programador.
   Não existem limitações sobre a composição dos valores da string; em
   particular, bytes com valor <code class="literal">0</code> (“NUL bytes”) são permitidos
   em qualquer lugar da string (entretanto, algumas funções, mencionadas neste manual como não
   “binary safe”, podem repassar as strings para bibliotecas que ignorem os dados
   após o byte nulo.)
  </p>
  <p class="para">
   Esta natureza do tipo string explica o motivo de não haver o tipo &quot;byte&quot; disponível
   no PHP – as strings assumem este papel. Funções que não retornam nenhuma informação textual – por
   exemplo, dados arbitrários lidos de um socket de rede – continuarão retornando
   strings.
  </p>
  <p class="para">
   Dado que o PHP não dita uma codificação específica para strings, pode-se
   questionar como strings literais seriam codificadas. Por exemplo, a string
   <code class="literal">&quot;á&quot;</code> é equivalente a <code class="literal">&quot;\xE1&quot;</code> (ISO-8859-1),
   <code class="literal">&quot;\xC3\xA1&quot;</code> (UTF-8, C form),
   <code class="literal">&quot;\x61\xCC\x81&quot;</code> (UTF-8, D form) ou qualquer outra representação
   possível? A resposta é que a string poderá ser codificada em qualquer forma
   que o arquivo de script estiver codificado. Assim, se o script for escrito na
   codificação ISO-8859-1, a string será codificada como ISO-8859-1 e assim por diante. Entretanto,
   isso não se aplica se o Zend Multibyte estiver ativado; neste caso, o script
   pode ser escrito em uma codificação arbitrária (que é declarada explicitamente ou é
   detectada) e então convertida em um codificação interna, a qual
   será a codificação utilizada nas strings literais.
   Note que há algumas restrições na codificação do script (ou na
   codificação interna caso o Zend Multibyte esteja ativo) – isso quase sempre
   significa que essa codificação deve ser um conjunto que contenha dentro de si a ASCII, como
   UTF-8 ou ISO-8859-1. Note, entretanto, que codificações que são dependentes de estado, onde
   os mesmos valores de bytes possam ser utilizados tanto em estados iniciais quanto não iniciais,
   podem ser problemáticos.
  </p>
  <p class="para">
   Claro que, para serem úteis, funções que operam em textos podem ter que
   fazer certas suposições sobre como as strings foram codificadas. Infelizmente, existem
   muitas variações sobre este assunto através das funções do PHP:
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Algumas funções assumem que a string foi codificada em alguma (qualquer) codificação de byte
     único, mas elas não precisam interpretar estes bytes como caracteres
     específicos. Este é por exemplo o caso das funções <span class="function"><a href="function.substr.php" class="function">substr()</a></span>,
     <span class="function"><a href="function.strpos.php" class="function">strpos()</a></span>, <span class="function"><a href="function.strlen.php" class="function">strlen()</a></span> ou
     <span class="function"><a href="function.strcmp.php" class="function">strcmp()</a></span>. Outra forma de refletir sobre essas funções é
     que elas operam em buffers de memória, isto é, elas trabalham com bytes e deslocamento
     de bytes.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Outras funções recebem a codificação da string, possivelmente elas
     assumem um padrão se nenhuma informação lhes for passada. Este é o caso da função
     <span class="function"><a href="function.htmlentities.php" class="function">htmlentities()</a></span> e da maioria das funções
     da extensão <a href="book.mbstring.php" class="link">mbstring</a>.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Outras utilizam o idioma atual (veja <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span>), mas
     elas operam byte-a-byte.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Finalmente, elas podem simplesmente assumir que a string esteja utilizando uma codificação específica,
     geralmente UTF-8. Este é o caso da maioria das funções das extensões
     <a href="book.intl.php" class="link">intl</a> e
     <a href="book.pcre.php" class="link">PCRE</a>
     (na segunda, somente quando o modificador <code class="literal">u</code> é utilizado).
    </span>
   </li>
  </ul>

  <p class="para">
   Por fim, isso significa que escrever programas corretos utilizando Unicode depende de
   evitar cuidadosamente funções que não funcionam e que provavelmente
   irão corromper os dados e usar, em substituição, funções que se comportem corretamente,
   geralmente das extensões <a href="book.intl.php" class="link">intl</a> e
   <a href="book.mbstring.php" class="link">mbstring</a>.
   Entretanto, usar funções que manipulam codificação Unicode é somente o
   começo. Não importa as funções que a linguagem provê, é essencial
   saber a especificação Unicode. Por exemplo, um programa que supõe que só
   existem maiúsculas e mínusculas está fazendo uma suposição errada.
  </p>
 </div>
</div><?php manual_footer($setup); ?>