<?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>, ele 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">
    <span class="simpara">Numérico</span>
   </li>
   <li class="listitem">
    <span class="simpara">String</span>
   </li>
   <li class="listitem">
    <span class="simpara">Lógico</span>
   </li>
   <li class="listitem">
    <span class="simpara">Inteiro e string</span>
   </li>
   <li class="listitem">
    <span class="simpara">Comparação</span>
   </li>
   <li class="listitem">
    <span class="simpara">Função</span>
   </li>
  </ul>
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <span 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; é convertido.
  </span>
 </p></blockquote>

 <p class="simpara">
  Para forçar uma variável ser avaliada como um certo tipo, veja a seção
  <a href="language.types.type-juggling.php#language.types.typecasting" class="link">Conversão de tipo</a>. Se
  desejar mudar o tipo de uma variável, veja 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">
   Esse contexto é utilizando em
   <a href="language.operators.arithmetic.php" class="link">operadores aritméticos</a>.
  </p>

  <p class="simpara">
   Esse contexto ocorre se um dos operandos é um <span class="type"><a href="language.types.float.php" class="type float">float</a></span> (e não
   interpretável como <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>), se ambos os operandos são interpretados como
   <span class="type"><a href="language.types.float.php" class="type float">float</a></span>, ou se o resultado é um <span class="type"><a href="language.types.float.php" class="type float">float</a></span>.
   Se não, se os operandos são interpretados como <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>,
   ou o resultado é um <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>.
   A partir do 8.0.0, se um dos operandos não pode ser reinterpretado, um erro do tipo
   <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> é lançado.
  </p>
 </div>

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

  <p class="simpara">
   Esse 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>,
   o
   <a href="language.operators.string.php" class="link">operador de concatenação</a>.
  </p>

  <p class="simpara">
   Nesse 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, então <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> é lançado.
   Anteriormente ao 7.4.0, um alerta <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">
   Nesse 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 quando utilizando
   <a href="language.operators.bitwise.php" class="link">operadores bitwise</a>.
  </p>

  <p class="simpara">
   Este contexto ocorre se todos os operandos são do tipo <span class="type"><a href="language.types.string.php" class="type string">string</a></span>,
   ou o valor retornado é <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
   Se não, os operados são interpretados como <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>,
   ou o resultado é 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 reinterpretado, então
   <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> é lançado.
  </p>
 </div>

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

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

  <p class="simpara">
   As conversões de tipo que ocorrem nesse contexto são explicados na
   tabela de sobre comparação entre vários tipos, explicadas
   <a href="language.operators.comparison.php#language.operators.comparison.types" class="link">aqui</a>.
  </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="para">
   Nesse contexto, o valor precisa do tipo informado.
   Duas alternativas existem. A primeira: se o valor é do tipo
   <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> e o tipo declarado é <span class="type"><a href="language.types.float.php" class="type float">float</a></span>, então o
   inteiro é convertido num número de ponto flutuante.
   A segunda alternativa: se o tipo declarado é um <em>escalar</em>,
   
   e o valor é conversível no tipo escalar, juntamente com
   o modo de conversão coercivo no estado ativo
   (o padrão), o valor pode ser convertido no valor escalar.
   Veja abaixo uma descrição detalhada desse 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, mas
    esse comportamento foi <em>DESCONTINUADO</em> desde o 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">
     <span class="simpara">
      Declaração <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>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Declaração <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>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Declaração <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>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Declaração <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>.
     </span>
    </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">
      <span class="simpara">
       <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <span class="type"><a href="language.types.float.php" class="type float">float</a></span>
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
      </span>
     </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="para">
     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 existem 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 que podem ser convertidos em tipos union</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">// int|string<br /></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<br /></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<br /></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()"<br />                      </span><span style="color: #FF8000">// e objero não compatível com int, padrão para string<br /></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<br /></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<br /></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<br /></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<br /></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<br /></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<br /><br />// int|float|bool<br /></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<br /></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<br /><br /></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<br /></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<br /></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<br /></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<br /></span><span style="color: #0000BB">?&gt;</span></span></code></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"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$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<br /></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<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$bar</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></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>

  <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> ainda existem
    para compatibilidade. 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"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$foo </span><span style="color: #007700">= (int) </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= ( int ) </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></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"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$binary </span><span style="color: #007700">= (binary) </span><span style="color: #0000BB">$string</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$binary </span><span style="color: #007700">= </span><span style="color: #DD0000">b"binary string"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></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"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$foo </span><span style="color: #007700">= </span><span style="color: #0000BB">10</span><span style="color: #007700">;            </span><span style="color: #FF8000">// $foo é int<br /></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<br /></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<br /><br />// Isto exibe "são iguais"<br /></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">) {<br />    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">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></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="types.comparisons.php" class="link">Tabela de conversão de tipos</a></li>
   </ul>
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span 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:
   </span>

   <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"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$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<br /></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<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$a</span><span style="color: #007700">;       </span><span style="color: #FF8000">// bar<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <span 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.
   </span>
  </p></blockquote>
 </div>

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