<?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 explícita de tipo en la declaración de variables.
  En este caso, el tipo de una variable se determina por el valor que almacena.
  Es decir, si se asigna un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> a la variable
  <var class="varname">$var</var>, entonces <var class="varname">$var</var> será de tipo
  <span class="type"><a href="language.types.string.php" class="type string">string</a></span>. Si posteriormente se asigna un valor de tipo
  <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> a <var class="varname">$var</var>, pasará a 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 automáticamente el tipo de un valor a otro 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">Cadena</span>
   </li>
   <li class="listitem">
    <span class="simpara">Lógico</span>
   </li>
   <li class="listitem">
    <span class="simpara">Entero y cadena</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</em> cambia de tipo.
  </span>
 </p></blockquote>

 <p class="simpara">
  Para forzar a que una variable sea evaluada como un tipo determinado, consulte
  la sección sobre <a href="language.types.type-juggling.php#language.types.typecasting" class="link">moldeado de tipos</a>.
  Para cambiar el tipo de una variable, consulte 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 cuando se utiliza un
   <a href="language.operators.arithmetic.php" class="link">operador aritmético</a>.
  </p>

  <p class="simpara">
   En este contexto, si alguno de los operandos es de tipo <span class="type"><a href="language.types.float.php" class="type float">float</a></span>
   (o no puede interpretarse como un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>), ambos operandos se
   interpretarán como <span class="type"><a href="language.types.float.php" class="type float">float</a></span>s, y el resultado también será un
   <span class="type"><a href="language.types.float.php" class="type float">float</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 también será 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 interpretarse, se
   lanzará un <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Contextos de cadena</h3>

  <p class="simpara">
   Este es el contexto cuando se utiliza <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">interpolación de cadena</a>,
   o el
   <a href="language.operators.string.php" class="link">operador de concatenación de
   cadena</a>.
  </p>

  <p class="simpara">
   En este contexto, el valor se interpretará como <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
   Si el valor no puede interpretarse, se lanzará un
   <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>. Antes de PHP 7.4.0, se generaba un
   <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 cuando se utilizan sentencias 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 <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Contextos entero y cadena</h3>

  <p class="simpara">
   Este es el contexto cuando se utilizan
   <a href="language.operators.bitwise.php" class="link">operadores a nivel de bits</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>,
   el resultado también será un <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 también será 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 interpretarse, se
   lanzará un <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 cuando se utiliza un
   <a href="language.operators.comparison.php" class="link">operador de comparación</a>.
  </p>

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

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

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

  <p class="para">
   En este contexto, el valor debe ser de ese tipo. Existen dos excepciones:
   la primera es: 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 un número de
   punto flotante. La segunda es: si el tipo declarado es un tipo
   <em>escalar</em>
   
   , el valor es convertible a un tipo escalar y el modo de tipado coercitivo
   está activo (por omisión), el valor puede convertirse en un valor escalar
   aceptado. Consulte a continuación para obtener una descripción de este
   comportamiento.
  </p>

  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    Las <a href="functions.internal.php" class="link">funciones internas</a> convierten
    automáticamente <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> a tipos escalares; este comportamiento está
    <em>DEPRECADO</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">
      Declaración de tipo <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>: el 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">
      Declaración de tipo <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>: el 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">
      Declaración de tipo <span class="type"><a href="language.types.float.php" class="type float">float</a></span>: el 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">
      Declaración de tipo <span class="type"><a href="language.types.string.php" class="type string">string</a></span>: el 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 tipos de unión</h4>
   <p class="para">
    Cuando <code class="literal">strict_types</code> no está habilitado, las
    declaraciones de tipo escalar están sujetas a conversiones implícitas
    limitadas. Si el tipo exacto del valor no es parte de la unión, entonces
    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 coercionado al tipo
    bajo la semántica de verificación de tipos existente de PHP, entonces se
    elige el tipo. De lo contrario, se prueba con el siguiente tipo.
   </p>

   <div class="caution"><strong class="caution">Precaución</strong>
    <p class="para">
     Como excepción, si el valor es una cadena y tanto int como float son 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>
     existente. Por ejemplo, para <code class="literal">&quot;42&quot;</code> se elige
     <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>, mientras que para <code class="literal">&quot;42.0&quot;</code> se elige
     <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">
     Los tipos que no forman parte de la lista de preferencias anterior no son
     objetivos elegibles para coerción implícita. En particular, no ocurren
     coerciones implícitas 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>.
    </p>
   </p></blockquote>

   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Ejemplo de tipos siendo coercionados a un tipo parte 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">"Resultado de __toString()"<br />                      </span><span style="color: #FF8000">// objeto nunca compatible con int, retrocede 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 int, retrocede 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 int, retrocede 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">// cadena 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">// cadena 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">// no es cadena numérica, retrocede 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 es cadena numérica, retrocede 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 es cadena numérica, retrocede 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">Moldeado de tipos</h3>

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

  <div class="example" id="example-2">
   <p><strong>Ejemplo #2 Moldeado de tipos</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 entero<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 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">
   Los moldeados permitidos son:
  </p>

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

  <p class="simpara">
   El moldeado <a href="language.types.void.php#language.types.void.casting" class="link"><code class="literal">(void)</code></a>
   también está disponible a partir de PHP 8.5.0, pero no es una conversión
   de valor. Se utiliza como una sentencia para descartar explícitamente el
   resultado de una expresión.
  </p>

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

  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    El alias de moldeado <code class="literal">(real)</code> fue deprecado 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 moldeado <code class="literal">(unset)</code> fue deprecado a partir de PHP 7.2.0.
    Tenga en cuenta que el moldeado <code class="literal">(unset)</code> es igual a
    asignar el valor <span class="type"><a href="language.types.null.php" class="type NULL">NULL</a></span> a la variable o llamada.
    El moldeado <code class="literal">(unset)</code> fue eliminado a partir de PHP 8.0.0.
   </p>
  </div>

  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="simpara">
    El moldeado <code class="literal">(binary)</code> y el prefijo <code class="literal">b</code>
    existen para soporte futuro. Actualmente <code class="literal">(binary)</code> y
    <code class="literal">(string)</code> son idénticos, sin embargo esto puede cambiar y
    no debe ser utilizado como dependencia.
   </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 moldeado.
    Por lo tanto, los siguientes dos moldeados 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">
    Moldeando literales <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s y variables a
    <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"cadena binaria"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  
  <p class="simpara">
   En lugar de moldear una variable a un <span class="type"><a href="language.types.string.php" class="type string">string</a></span>, también es
   posible encerrar la variable entre comillas dobles.
  </p>

  <div class="example" id="example-3">
   <p><strong>Ejemplo #3 Diferentes mecanismos de moldeado</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 entero<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 también es una cadena<br /><br />// Esto imprime que "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">
   Puede que no sea obvio exactamente qué ocurrirá al moldear entre ciertos
   tipos. Para más información, consulte estas secciones:
   <ul class="simplelist">
    <li><a href="language.types.boolean.php#language.types.boolean.casting" class="link">Conversión a booleano</a></li>
    <li><a href="language.types.integer.php#language.types.integer.casting" class="link">Conversión a entero</a></li>
    <li><a href="language.types.float.php#language.types.float.casting" class="link">Conversión a float</a></li>
    <li><a href="language.types.string.php#language.types.string.casting" class="link">Conversión a cadena</a></li>
    <li><a href="language.types.array.php#language.types.array.casting" class="link">Conversión a array</a></li>
    <li><a href="language.types.object.php#language.types.object.casting" class="link">Conversión a objeto</a></li>
    <li><a href="language.types.resource.php#language.types.resource.casting" class="link">Conversión a recurso</a></li>
    <li><a href="language.types.null.php#language.types.null.casting" class="link">Conversión a NULL</a></li>
    <li><a href="language.types.void.php#language.types.void.casting" class="link">Descartar un valor con <code class="literal">(void)</code></a></li>
    <li><a href="types.comparisons.php" class="link">Las tablas de comparación de tipos</a></li>
   </ul>
  </p>

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

   <div class="example" id="example-4">
    <p><strong>Ejemplo #4 Usando offset 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<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<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">
    Consulte la sección titulada <a href="language.types.string.php#language.types.string.substr" class="link">Acceso a cadena por carácter</a>
    para más información.
   </span>
  </p></blockquote>
 </div>

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