<?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.type-juggling.php',
    1 => 'Convers&atilde;o autom&aacute;tica de tipos',
    2 => 'Convers&atilde;o autom&aacute;tica de tipos',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => 'Tipos',
  ),
  'prev' => 
  array (
    0 => 'language.types.declarations.php',
    1 => 'Declara&ccedil;&otilde;es de tipo',
  ),
  'next' => 
  array (
    0 => 'language.variables.php',
    1 => 'Vari&aacute;veis',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'language/types/type-juggling.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.types.type-juggling" class="sect1">
 <h2 class="title">Conversão automática de tipos</h2>

 <p class="simpara">
  O PHP não requer a tipagem explícita em declarações de variáveis.
  Nesse caso, o tipo de uma variável é determinado pelo valor armazenado.
  Ou seja, se uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> é armazenada numa variável
  <var class="varname">$var</var>, então <var class="varname">$var</var> terá o tipo
  <span class="type"><a href="language.types.string.php" class="type string">string</a></span>. Se após isso um valor <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> for armazenado
  em <var class="varname">$var</var>, ela será do tipo <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>.
 </p>

 <p class="para">
  O PHP pode tentar converter o tipo de um valor em outro automaticamente
  em alguns contextos. Esses contextos são:
  <ul class="itemizedlist">
   <li class="listitem">
    <p class="simpara">Numérico</p>
   </li>
   <li class="listitem">
    <p class="simpara">String</p>
   </li>
   <li class="listitem">
    <p class="simpara">Lógico</p>
   </li>
   <li class="listitem">
    <p class="simpara">Inteiro e string</p>
   </li>
   <li class="listitem">
    <p class="simpara">Comparação</p>
   </li>
   <li class="listitem">
    <p class="simpara">Função</p>
   </li>
  </ul>
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <p class="simpara">
   Quando um valor precisa ser interpretado como um tipo diferente, o valor
   em si <em>não</em> se altera, apenas uma &quot;cópia&quot; é convertida.
  </p>
 </p></blockquote>

 <p class="simpara">
  Para forçar uma variável a ser avaliada como um certo tipo, consulte a seção sobre
  <a href="language.types.type-juggling.php#language.types.typecasting" class="link">conversão de tipo</a>. Se
  for necessário mudar o tipo de uma variável, consulte a função <span class="function"><a href="function.settype.php" class="function">settype()</a></span>.
 </p>

 <div class="sect2">
  <h3 class="title">Contexto numérico</h3>

  <p class="simpara">
   Este contexto é utilizado em
   <a href="language.operators.arithmetic.php" class="link">operadores aritméticos</a>.
  </p>

  <p class="simpara">
   Neste contexto, se um dos operandos for um <span class="type"><a href="language.types.float.php" class="type float">float</a></span> (ou não
   interpretável como <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>), ambos os operandos serão interpretados como
   <span class="type"><a href="language.types.float.php" class="type float">float</a></span>, e o resultado será um <span class="type"><a href="language.types.float.php" class="type float">float</a></span>.
   Caso contrário, os operandos serão interpretados como <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>,
   e o resultado também será um <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>.
   A partir do PHP 8.0.0, se um dos operandos não puser ser interpretado, um
   <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span> é lançado.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Contextos string</h3>

  <p class="simpara">
   Este contexto ocorre ao se utilizar <span class="function"><a href="function.echo.php" class="function">echo</a></span>,
   <span class="function"><a href="function.print.php" class="function">print</a></span>,
   <a href="language.types.string.php#language.types.string.parsing" class="link">interpolação de strings</a>
   ou o
   <a href="language.operators.string.php" class="link">operador de concatenação</a>.
  </p>

  <p class="simpara">
   Neste contexto, o valor será interpretado como <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
   Se o valor não puder ser interpretado, um <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span> é lançado.
   Anteriormente ao 7.4.0, um <strong><code><a href="errorfunc.constants.php#constant.e-recoverable-error">E_RECOVERABLE_ERROR</a></code></strong> era emitido.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Contextos lógicos</h3>

  <p class="simpara">
   Este contexto ocorre em instruções condicionais, no uso do
   <a href="language.operators.comparison.php#language.operators.comparison.ternary" class="link">operador ternário</a>,
   ou em uma <a href="language.operators.logical.php" class="link">operação lógica</a>.
  </p>

  <p class="simpara">
   Neste contexto, o valor será interpretado como <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Contextos inteiros e string</h3>

  <p class="simpara">
   Este contexto ocorre ao utilizar
   <a href="language.operators.bitwise.php" class="link">operadores binários</a>.
  </p>

  <p class="simpara">
   Neste contexto, se todos os operandos forem do tipo <span class="type"><a href="language.types.string.php" class="type string">string</a></span>, o resultado
   também será uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
   Caso contrário, os operados serão interpretados como <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>,
   e o resultado também será um <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>.
   A partir do PHP 8.0.0, se um dos operandos não puder ser interpretado, um
   <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span> é lançado.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Contextos de comparação</h3>

  <p class="simpara">
   Este contexto ocorre ao utilizar
   <a href="language.operators.comparison.php" class="link">operadores de comparação</a>.
  </p>

  <p class="simpara">
   As conversões de tipo que ocorrem neste contexto são explicadas na
   <a href="language.operators.comparison.php#language.operators.comparison.types" class="link">tabela</a>
   de comparações entre vários tipos.
  </p>
 </div>

 <div class="sect2" id="language.types.type-juggling.function">
  <h3 class="title">Contextos de função</h3>

  <p class="simpara">
   Este contexto ocorre quando um valor é um parâmetro tipado ou quando uma propriedade
   ou valor retornado de uma função declara um tipo.
  </p>

  <p class="simpara">
   Nesse contexto, o valor precisa ser do tipo informado.
   Existem duas exceções. A primeira é: se o valor for do tipo
   <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> e o tipo declarado for um <span class="type"><a href="language.types.float.php" class="type float">float</a></span>, o
   inteiro será convertido num número de ponto flutuante.
   A segunda é: se o tipo declarado for um tipo <em>escalar</em>,
   
   ou ser o valor for conversível a um tipo escalar e
   o modo de tipagem coercitiva estiver ativo
   (o padrão), o valor pode ser convertido para um valor escalar aceito.
   Veja abaixo uma descrição deste comportamento.
  </p>

  <div class="warning"><strong class="warning">Aviso</strong>
   <p class="simpara">
    <a href="functions.internal.php" class="link">Funções internas</a>
    convertem automaticamente <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> para tipos escalares.
    Este comportamento foi <em>DESCONTINUADO</em> a partir do PHP 8.1.0.
   </p>
  </div>

  <div class="sect3" id="language.types.type-juggling.function.simple">
   <h4 class="title">Coerção de tipos com tipos declarados</h4>
   <ul class="itemizedlist">
    <li class="listitem">
     <p class="simpara">
      Declaração de tipo <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>: o valor é convertido para <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
     </p>
    </li>
    <li class="listitem">
     <p class="simpara">
      Declaração de tipo <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>: o valor é convertido para <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
      quando a conversão for bem definida. Por exemplo, quando uma string é
      <a href="language.types.numeric-strings.php" class="link">numérica</a>.
     </p>
    </li>
    <li class="listitem">
     <p class="simpara">
      Declaração de tipo <span class="type"><a href="language.types.float.php" class="type float">float</a></span>: o valor é convertido para <span class="type"><a href="language.types.float.php" class="type float">float</a></span>
      quando a conversão for bem definida. Por exemplo, quando uma string é
      <a href="language.types.numeric-strings.php" class="link">numérica</a>.
     </p>
    </li>
    <li class="listitem">
     <p class="simpara">
      Declaração de tipo <span class="type"><a href="language.types.string.php" class="type string">string</a></span>: o valor é convertido para <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
     </p>
    </li>
   </ul>
  </div>

  <div class="sect3" id="language.types.type-juggling.function.union">
   <h4 class="title">Conversão de tipos em tipos union</h4>
   <p class="para">
    Quando <code class="literal">strict_types</code> está desativado, declarações de tipos escalares
    estão sujeitas a conversões implícitas e limitadas.
    Se o tipo exato do valor não é parte da união, então o tipo final da conversão
    é escolhido na seguinte ordem de preferência:

    <ol type="1">
     <li class="listitem">
      <p class="simpara">
       <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
      </p>
     </li>
     <li class="listitem">
      <p class="simpara">
       <span class="type"><a href="language.types.float.php" class="type float">float</a></span>
      </p>
     </li>
     <li class="listitem">
      <p class="simpara">
       <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
      </p>
     </li>
     <li class="listitem">
      <p class="simpara">
       <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
      </p>
     </li>
    </ol>

    Se o tipo existe na união e o valor puder ser convertido pela mesma
    semântica do PHP, então esse tipo é escolhido.
    Senão, um tipo seguinte é tentado.
   </p>

   <div class="caution"><strong class="caution">Cuidado</strong>
    <p class="para">
     Existe uma exceção, no caso do valor ser uma string, e ambos int e float serem partes
     da união, o tipo preferido será determinado pela semântica de
     <a href="language.types.numeric-strings.php" class="link">strings
     numéricas</a>.
     Por exemplo, para <code class="literal">&quot;42&quot;</code> o tipo <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> é escolhido,
     enquanto que para <code class="literal">&quot;42.0&quot;</code> o tipo escolhido é <span class="type"><a href="language.types.float.php" class="type float">float</a></span>.
    </p>
   </div>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="simpara">
     Tipos que não fazem parte da lista acima não são elegíveis para destinos
     da conversão implícita. Em particular, não ocorrem conversões implícitas para
     os tipos <span class="type"><a href="language.types.null.php" class="type null">null</a></span>, <span class="type"><a href="language.types.singleton.php" class="type false">false</a></span> e
     <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span>.
    </p>
   </p></blockquote>

   <div class="example" id="example-1">
    <p><strong>Exemplo #1 Exemplo de tipos sendo convertidos em um tipo parte da união</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #FF8000">// int|string
</span><span style="color: #0000BB">42    </span><span style="color: #007700">--&gt; </span><span style="color: #0000BB">42          </span><span style="color: #FF8000">// tipo exato
</span><span style="color: #DD0000">"42"  </span><span style="color: #007700">--&gt; </span><span style="color: #DD0000">"42"        </span><span style="color: #FF8000">// tipo exato
</span><span style="color: #007700">new </span><span style="color: #0000BB">ObjectWithToString </span><span style="color: #007700">--&gt; </span><span style="color: #DD0000">"Resultado de __toString()"
                      </span><span style="color: #FF8000">// e objero não compatível com int, padrão para string
</span><span style="color: #0000BB">42.0  </span><span style="color: #007700">--&gt; </span><span style="color: #0000BB">42          </span><span style="color: #FF8000">// float compatível com int
</span><span style="color: #0000BB">42.1  </span><span style="color: #007700">--&gt; </span><span style="color: #0000BB">42          </span><span style="color: #FF8000">// float compatível com int
</span><span style="color: #0000BB">1e100 </span><span style="color: #007700">--&gt; </span><span style="color: #DD0000">"1.0E+100"  </span><span style="color: #FF8000">// float muito grande para int, padrão para string
</span><span style="color: #0000BB">INF   </span><span style="color: #007700">--&gt; </span><span style="color: #DD0000">"INF"       </span><span style="color: #FF8000">// float muito grande para int, padrão para string
</span><span style="color: #0000BB">true  </span><span style="color: #007700">--&gt; </span><span style="color: #0000BB">1           </span><span style="color: #FF8000">// bool compatível com int
</span><span style="color: #007700">[]    --&gt; </span><span style="color: #0000BB">TypeError   </span><span style="color: #FF8000">// array não é compatível com int ou string

// int|float|bool
</span><span style="color: #DD0000">"45"    </span><span style="color: #007700">--&gt; </span><span style="color: #0000BB">45        </span><span style="color: #FF8000">// string numérica int
</span><span style="color: #DD0000">"45.0"  </span><span style="color: #007700">--&gt; </span><span style="color: #0000BB">45.0      </span><span style="color: #FF8000">// string numérica float

</span><span style="color: #DD0000">"45X"   </span><span style="color: #007700">--&gt; </span><span style="color: #0000BB">true      </span><span style="color: #FF8000">// string não numérica, padrão para bool
</span><span style="color: #DD0000">""      </span><span style="color: #007700">--&gt; </span><span style="color: #0000BB">false     </span><span style="color: #FF8000">// string não numérica, padrão para bool
</span><span style="color: #DD0000">"X"     </span><span style="color: #007700">--&gt; </span><span style="color: #0000BB">true      </span><span style="color: #FF8000">// string não numérica, padrão para bool
</span><span style="color: #007700">[]      --&gt; </span><span style="color: #0000BB">TypeError </span><span style="color: #FF8000">// array não é compatível com int, float ou bool
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
    </div>

   </div>
  </div>

 </div>

 <div class="sect2" id="language.types.typecasting">
  <h3 class="title">Conversão explícita</h3>

  <p class="simpara">
   Converte o valor do tipo para o tipo escolhido através da escrita do tipo
   entre parênteses, antes do valor a ser convertido.
  </p>

  <div class="example" id="example-2">
   <p><strong>Exemplo #2 Conversão de tipo</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$foo </span><span style="color: #007700">= </span><span style="color: #0000BB">10</span><span style="color: #007700">;           </span><span style="color: #FF8000">// $foo é um inteiro
</span><span style="color: #0000BB">$bar </span><span style="color: #007700">= (bool) </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;  </span><span style="color: #FF8000">// $bar é um booleano

</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$bar</span><span style="color: #007700">);
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

  </div>

  <p class="simpara">
   As conversões previstas são:
  </p>

  <ul class="simplelist">
   <li><code class="literal">(int)</code> - converte para <span class="type"><a href="language.types.integer.php" class="type int">int</a></span></li>
   <li><code class="literal">(bool)</code> - converte para <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></li>
   <li><code class="literal">(float)</code> - converte para <span class="type"><a href="language.types.float.php" class="type float">float</a></span></li>
   <li><code class="literal">(string)</code> - converte para <span class="type"><a href="language.types.string.php" class="type string">string</a></span></li>
   <li><code class="literal">(array)</code> - converte para <span class="type"><a href="language.types.array.php" class="type array">array</a></span></li>
   <li><code class="literal">(object)</code> - converte para <span class="type"><a href="language.types.object.php" class="type object">object</a></span></li>
   <li><code class="literal">(unset)</code> - converte para <span class="type"><a href="language.types.null.php" class="type NULL">NULL</a></span></li>
  </ul>

  <p class="simpara">
   A conversão <a href="language.types.void.php#language.types.void.casting" class="link"><code class="literal">(void)</code></a>
   também está disponível a partir do PHP 8.5.0, mas não é uma conversão de valor.
   Ela é usada como uma instrução para descartar explicitamente o resultado de uma expressão.
  </p>

  <div class="warning"><strong class="warning">Aviso</strong>
   <p class="para">
    <code class="literal">(integer)</code> é um sinônimo de <code class="literal">(int)</code>.
    <code class="literal">(boolean)</code> é um sinônimo de <code class="literal">(bool)</code>.
    <code class="literal">(binary)</code> é um sinônimo de <code class="literal">(string)</code>.
    <code class="literal">(double)</code> e <code class="literal">(real)</code> são sinônimos de
    <code class="literal">(float)</code>.
    Essas conversões alternativas não usam o nome canônico de tipo e foram descontinuadas a partir do PHP 8.5.0.
   </p>
  </div>

  <div class="warning"><strong class="warning">Aviso</strong>
   <p class="simpara">
    A conversão <code class="literal">(real)</code> foi descontinuada a partir do PHP 7.4.0
    e removida a partir do PHP 8.0.0.
   </p>
  </div>

  <div class="warning"><strong class="warning">Aviso</strong>
   <p class="simpara">
    A conversão <code class="literal">(unset)</code> foi descontinuada a partir do PHP 7.2.0.
    Observe que a conversão <code class="literal">(unset)</code> tem o mesmo efeito que
    informar o valor <span class="type"><a href="language.types.null.php" class="type NULL">NULL</a></span> para a variável ou chamada de função.
    A conversão <code class="literal">(unset)</code> foi removida no PHP 8.0.0.
   </p>
  </div>

  <div class="caution"><strong class="caution">Cuidado</strong>
   <p class="simpara">
    A conversão <code class="literal">(binary)</code> e o prefixo <code class="literal">b</code> existem
    para compatibilidade futura. Atualmente, <code class="literal">(binary)</code> e
    <code class="literal">(string)</code> são idênticos. No entanto, isso pode mudar
    e não deve ser considerado estável.
   </p>
  </div>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Espaços são ignorados dentro dos parênteses de uma conversão.
    Portanto, as linhas seguintes são equivalentes:
    <div class="informalexample">
     <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$foo </span><span style="color: #007700">= (int) </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;
</span><span style="color: #0000BB">$foo </span><span style="color: #007700">= ( int ) </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
     </div>

    </div>
   </p>
  </p></blockquote>

  <div class="informalexample">
   <p class="simpara">
    Convertendo <span class="type"><a href="language.types.string.php" class="type string">string</a></span> e variáveis para
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s binárias:
   </p>

   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$binary </span><span style="color: #007700">= (binary) </span><span style="color: #0000BB">$string</span><span style="color: #007700">;
</span><span style="color: #0000BB">$binary </span><span style="color: #007700">= </span><span style="color: #DD0000">b"binary string"</span><span style="color: #007700">;
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

  </div>

  
  <p class="simpara">
   Em vez de converter uma variável para <span class="type"><a href="language.types.string.php" class="type string">string</a></span>, é possível
   delimitar a variável entre aspas.
  </p>

  <div class="example" id="example-3">
   <p><strong>Exemplo #3 Diferentes mecanismos de conversão</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$foo </span><span style="color: #007700">= </span><span style="color: #0000BB">10</span><span style="color: #007700">;            </span><span style="color: #FF8000">// $foo é int
</span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$foo</span><span style="color: #DD0000">"</span><span style="color: #007700">;        </span><span style="color: #FF8000">// $str é string
</span><span style="color: #0000BB">$fst </span><span style="color: #007700">= (string) </span><span style="color: #0000BB">$foo</span><span style="color: #007700">; </span><span style="color: #FF8000">// $fst também é string

// Isto exibe "são iguais"
</span><span style="color: #007700">if (</span><span style="color: #0000BB">$fst </span><span style="color: #007700">=== </span><span style="color: #0000BB">$str</span><span style="color: #007700">) {
    echo </span><span style="color: #DD0000">"são iguais"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;
}
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

  </div>

  <p class="para">
   Não é tão óbvio o que acontece ao converter entre certos
   tipos. Para mais informações, veja as seções:
   <ul class="simplelist">
    <li><a href="language.types.boolean.php#language.types.boolean.casting" class="link">Convertendo para boolean</a></li>
    <li><a href="language.types.integer.php#language.types.integer.casting" class="link">Convertendo para integer</a></li>
    <li><a href="language.types.float.php#language.types.float.casting" class="link">Convertendo para float</a></li>
    <li><a href="language.types.string.php#language.types.string.casting" class="link">Convertendo para string</a></li>
    <li><a href="language.types.array.php#language.types.array.casting" class="link">Convertendo para array</a></li>
    <li><a href="language.types.object.php#language.types.object.casting" class="link">Convertendo para object</a></li>
    <li><a href="language.types.resource.php#language.types.resource.casting" class="link">Convertendo para resource</a></li>
    <li><a href="language.types.null.php#language.types.null.casting" class="link">Convertendo para NULL</a></li>
    <li><a href="language.types.void.php#language.types.void.casting" class="link">Descartando um valor com <code class="literal">(void)</code></a></li>
    <li><a href="types.comparisons.php" class="link">Tabela de conversão de tipos</a></li>
   </ul>
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="simpara">
    O PHP suporta a indexação de <span class="type"><a href="language.types.string.php" class="type string">string</a></span> utilizando
    a mesma sintaxe de <span class="type"><a href="language.types.array.php" class="type array">array</a></span>s, de forma que o exemplo seguinte
    é válido em todas as versões do PHP:
   </p>

   <div class="example" id="example-4">
    <p><strong>Exemplo #4 Usando índice de array com uma string</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$a    </span><span style="color: #007700">= </span><span style="color: #DD0000">'car'</span><span style="color: #007700">; </span><span style="color: #FF8000">// $a é uma string
</span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">] = </span><span style="color: #DD0000">'b'</span><span style="color: #007700">;   </span><span style="color: #FF8000">// $a ainda é uma string
</span><span style="color: #007700">echo </span><span style="color: #0000BB">$a</span><span style="color: #007700">;       </span><span style="color: #FF8000">// bar
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
    </div>

   </div>

   <p class="simpara">
    Veja a seção sobre <a href="language.types.string.php#language.types.string.substr" class="link">Acesso a caracteres
    da string</a> para mais informações.
   </p>
  </p></blockquote>
 </div>

</div><?php manual_footer($setup); ?>