<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'language.types.type-juggling.php',
    1 => 'Manipulaci&oacute;n de tipos',
    2 => 'Manipulaci&oacute;n de tipos',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => 'Los tipos',
  ),
  'prev' => 
  array (
    0 => 'language.types.declarations.php',
    1 => 'Declaraciones de tipo',
  ),
  'next' => 
  array (
    0 => 'language.variables.php',
    1 => 'Variables',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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">Manipulación de tipos</h2>

 <p class="simpara">
  PHP no requiere una definición de tipo explícita en las declaraciones de variables.
  En este caso, el tipo de una variable se determina en función del valor que tiene almacenado.
  Es decir, si una <span class="type"><a href="language.types.string.php" class="type string">string</a></span> se asigna a la variable
  <var class="varname">$var</var>, entonces <var class="varname">$var</var> es de tipo
  <span class="type"><a href="language.types.string.php" class="type string">string</a></span>. Si después se asigna un valor <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> a
  <var class="varname">$var</var>, será de tipo <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>.
 </p>

 <p class="para">
  PHP puede intentar convertir el tipo de un valor en otro automáticamente
  en ciertos contextos. Los diferentes contextos que existen son:
  <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">Integral y string</span>
   </li>
   <li class="listitem">
    <span class="simpara">Comparativo</span>
   </li>
   <li class="listitem">
    <span class="simpara">Función</span>
   </li>
  </ul>
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <span class="simpara">
   Cuando un valor necesita ser interpretado como un tipo diferente,
   el valor en sí <em>no cambia</em> de tipo.
  </span>
 </p></blockquote>

 <p class="simpara">
  Para forzar una variable a ser evaluada como un tipo particular, ver la
  sección sobre <a href="language.types.type-juggling.php#language.types.typecasting" class="link">casting de tipo</a>.
  Para cambiar el tipo de una variable, ver la función <span class="function"><a href="function.settype.php" class="function">settype()</a></span>.
 </p>

 <div class="sect2">
  <h3 class="title">Contextos numéricos</h3>

  <p class="simpara">
   Este es el contexto al utilizar un
   <a href="language.operators.arithmetic.php" class="link">operador aritmético</a>.
  </p>

  <p class="simpara">
   En este contexto, si uno de los operandos es un <span class="type"><a href="language.types.float.php" class="type float">float</a></span> (o
   no interpretable como <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>), ambos operandos se interpretan
   como <span class="type"><a href="language.types.float.php" class="type float">float</a></span>s, y el resultado será un <span class="type"><a href="language.types.float.php" class="type float">float</a></span>.
   De lo contrario, los operandos se interpretan como <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>s,
   y el resultado será también un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>.
   A partir de PHP 8.0.0, si uno de los operandos no puede ser interpretado como
   <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> se lanza.
  </p>
 </div>

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

  <p class="simpara">
   Este es el contexto al 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">la interpolación de cadenas de caracteres</a>, o el
   <a href="language.operators.string.php" class="link">operador de concatenación</a>
   para las cadenas de caracteres.
  </p>

  <p class="simpara">
   En este contexto, el valor se interpretará como una <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
   Si el valor no puede ser interpretado, se levanta una
   <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>.
   Anterior a PHP 7.4.0, se generaba una <strong><code><a href="errorfunc.constants.php#constant.e-recoverable-error">E_RECOVERABLE_ERROR</a></code></strong>.
  </p>
 </div>

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

  <p class="simpara">
   Este es el contexto al utilizar declaraciones condicionales,
   el <a href="language.operators.comparison.php#language.operators.comparison.ternary" class="link">operador ternario</a>,
   o un <a href="language.operators.logical.php" class="link">operador lógico</a>.
  </p>

  <p class="simpara">
   En este contexto, el valor se interpretará como un <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
  </p>
 </div>

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

  <p class="simpara">
   Este es el contexto al utilizar un
   <a href="language.operators.bitwise.php" class="link">operador bit a bit</a>.
  </p>

  <p class="simpara">
   En este contexto, si todos los operandos son de tipo <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   entonces el resultado será también una <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
   De lo contrario, los operandos se interpretarán como <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>s,
   y el resultado será también un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>.
   A partir de PHP 8.0.0, si uno de los operandos no puede ser interpretado,
   se lanza una <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>.
  </p>
 </div>

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

  <p class="simpara">
   Este es el contexto al utilizar un
   <a href="language.operators.comparison.php" class="link">operador de comparación</a>.
  </p>

  <p class="simpara">
   Las conversiones de tipos que se producen en este contexto se explican
   en el <a href="language.operators.comparison.php#language.operators.comparison.types" class="link">tabla</a>
   Comparación con varios tipos.
  </p>
 </div>

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

  <p class="simpara">
   Este es el contexto cuando un valor se pasa a un parámetro o propiedad
   tipada o se devuelve desde una función que declara un tipo de retorno.
  </p>

  <p class="para">
   En este contexto, el valor debe ser una valor del tipo.
   Existen dos excepciones, la primera es la siguiente: si el valor es de
   tipo <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> y el tipo declarado es <span class="type"><a href="language.types.float.php" class="type float">float</a></span>, entonces
   el entero se convierte en número de coma flotante.
   La segunda es: si el tipo declarado es un tipo <em>escalar</em>
   
   , el valor es convertible en un tipo escalar, y el modo de tipado coercitivo
   está activo (por omisión), el valor puede ser convertido en un valor escalar aceptado.
   Ver a continuación para una descripción de este comportamiento.
  </p>

  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    <a href="functions.internal.php" class="link">Las funciones internas</a>
    fuerzan automáticamente <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> a los tipos escalares,
    este comportamiento está <em>OBSOLETO</em> a partir de PHP 8.1.0.
   </p>
  </div>

  <div class="sect3" id="language.types.type-juggling.function.simple">
   <h4 class="title">Tipado coercitivo con declaraciones de tipo simples</h4>
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      Tipo de declaración <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>: valor se interpreta como <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Tipo de declaración <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>: valor se interpreta como <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
      si la conversión está bien definida. Por ejemplo, la cadena es
      <a href="language.types.numeric-strings.php" class="link">numérica</a>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Tipo de declaración <span class="type"><a href="language.types.float.php" class="type float">float</a></span>: valor se interpreta como <span class="type"><a href="language.types.float.php" class="type float">float</a></span>
      si la conversión está bien definida. Por ejemplo, la cadena es
      <a href="language.types.numeric-strings.php" class="link">numérica</a>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Tipo de declaración <span class="type"><a href="language.types.string.php" class="type string">string</a></span>: valor se interpreta como <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">Tipado coercitivo con uniones de tipo</h4>
   <p class="para">
    Cuando <code class="literal">strict_types</code> no está activado, las
    declaraciones de tipo escalar están sujetas a restricciones de tipo
    implícitas limitadas.
    Si el tipo exacto del valor no forma parte de la unión, el tipo objetivo
    se elige en el siguiente orden de preferencia:

    <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>

    Si el tipo existe en la unión y el valor puede ser forzado a
    este tipo utilizando la semántica de verificación de tipo existente de PHP, entonces el tipo es elegido.
   </p>

   <div class="caution"><strong class="caution">Precaución</strong>
    <p class="para">
     A título de excepción, si el valor es una cadena y <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> y <span class="type"><a href="language.types.float.php" class="type float">float</a></span> forman
     ambos parte de la unión, el tipo preferido se determina por la
     semántica de <a href="language.types.numeric-strings.php" class="link">cadena numérica</a>.
     Por ejemplo, para <code class="literal">&quot;42&quot;</code> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> es elegido,
     mientras que para <code class="literal">&quot;42.0&quot;</code> <span class="type"><a href="language.types.float.php" class="type float">float</a></span> es elegido.
    </p>
   </div>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="para">
     Los tipos que no forman parte de la lista de preferencias anterior no
     son objetivos admisibles para la coerción implícita. En particular,
     ninguna restricción implícita a los 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> y
     <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> se produce.
    </p>
   </p></blockquote>

   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Ejemplo de tipos restringidos a una parte del tipo de la unión</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 exacto<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 exacto<br /></span><span style="color: #007700">new </span><span style="color: #0000BB">ObjectWithToString </span><span style="color: #007700">--&gt; </span><span style="color: #DD0000">"Result of __toString()"<br />                      </span><span style="color: #FF8000">// objeto nunca compatible con int, recurrir a 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 compatible con 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 compatible con 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 demasiado grande para el tipo int, recurrir a 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 demasiado grande para el tipo int, recurrir a 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 compatible con int<br /></span><span style="color: #007700">[]    --&gt; </span><span style="color: #0000BB">TypeError   </span><span style="color: #FF8000">// array no compatible con int o 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">// int string numérico<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">// float string numérico<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">// no string numérico, recurrir a bool<br /></span><span style="color: #DD0000">""      </span><span style="color: #007700">--&gt; </span><span style="color: #0000BB">false     </span><span style="color: #FF8000">// no string numérico, recurrir a 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">// no string numérico, recurrir a bool<br /></span><span style="color: #007700">[]      --&gt; </span><span style="color: #0000BB">TypeError </span><span style="color: #FF8000">// array no compatible con int, float o 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">Cast de tipo</h3>

  <p class="simpara">
   El casting de tipo convierte el valor a un tipo dado escribiendo el tipo
   entre paréntesis antes del valor a convertir.
  </p>

  <div class="example" id="example-2">
   <p><strong>Ejemplo #2 Conversión 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 es un integer<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 es un bool<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">
   Los casts permitidos son:
  </p>

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

  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="para">
    <code class="literal">(integer)</code> es un alias del cast <code class="literal">(int)</code>.
    <code class="literal">(boolean)</code> es un alias del cast <code class="literal">(bool)</code>.
    <code class="literal">(binary)</code> es un alias del cast <code class="literal">(string)</code>.
    <code class="literal">(double)</code> y <code class="literal">(real)</code> son alias del
    cast <code class="literal">(float)</code>.
    Estos casts no utilizan el nombre de tipo canónico y están obsoletos a partir de PHP 8.5.0.
   </p>
  </div>

  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    El alias de cast <code class="literal">(real)</code> está obsoleto a partir de PHP 7.4.0
    y eliminado a partir de PHP 8.0.0.
   </p>
  </div>

  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    El cast <code class="literal">(unset)</code> fue declarado obsoleto a partir de PHP 7.2.0.
    A notar que el cast <code class="literal">(unset)</code> es idéntico a asignar el
    valor <span class="type"><a href="language.types.null.php" class="type NULL">NULL</a></span> a una variable o una llamada.
    El cast <code class="literal">(unset)</code> es eliminado a partir de PHP 8.0.0.
   </p>
  </div>

  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="simpara">
    El cast <code class="literal">(binary)</code> y el prefijo <code class="literal">b</code>
    existen únicamente para la compatibilidad ascendente. Actualmente
    <code class="literal">(binary)</code> y <code class="literal">(string)</code> son idénticos,
    pero esto puede cambiar: no se debe contar con ello.
   </p>
  </div>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Los espacios en blanco se ignoran dentro de los paréntesis de un cast.
    Así, los dos casts siguientes son 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">
    Cast de <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s literales y variables en
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s binarios:
   </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">
   En lugar de transtypar una variable en una <span class="type"><a href="language.types.string.php" class="type string">string</a></span>, también es posible
   rodear la variable con comillas dobles.
  </p>

  <div class="example" id="example-3">
   <p><strong>Ejemplo #3 Diferentes mecanismos de conversión</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 es un integer<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 es una cadena<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 es también una cadena<br /><br />// Esto muestra "Son iguales"<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">"Son iguales"</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">
   Lo que ocurrirá exactamente al transtypar entre ciertos tipos
   no es necesariamente evidente. Para más información, ver estas secciones:
   <ul class="simplelist">
    <li><a href="language.types.boolean.php#language.types.boolean.casting" class="link">Convertir en boolean</a></li>
    <li><a href="language.types.integer.php#language.types.integer.casting" class="link">Convertir en integer</a></li>
    <li><a href="language.types.float.php#language.types.float.casting" class="link">Convertir en float</a></li>
    <li><a href="language.types.string.php#language.types.string.casting" class="link">Convertir en string</a></li>
    <li><a href="language.types.array.php#language.types.array.casting" class="link">Convertir en array</a></li>
    <li><a href="language.types.object.php#language.types.object.casting" class="link">Convertir en object</a></li>
    <li><a href="language.types.resource.php#language.types.resource.casting" class="link">Convertir en resource</a></li>
    <li><a href="language.types.null.php#language.types.null.casting" class="link">Convertir en NULL</a></li>
    <li><a href="types.comparisons.php" class="link">Las tablas de comparación de tipo</a></li>
   </ul>
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Como PHP soporta la indexación en las <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s
    mediante posiciones utilizando la misma sintaxis que la indexación de <span class="type"><a href="language.types.array.php" class="type array">array</a></span>,
    el siguiente ejemplo es válido para todas las versiones de PHP:
   </span>

   <div class="example" id="example-4">
    <p><strong>Ejemplo #4 Uso de un índice de array con una cadena</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 es una cadena de caracteres<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 sigue siendo una cadena de caracteres<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">
    Ver la sección sobre el <a href="language.types.string.php#language.types.string.substr" class="link">acceso
    a las cadenas por caracter</a> para más información.
   </span>
  </p></blockquote>
 </div>

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