<?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.string.php',
    1 => 'Cadenas',
    2 => 'Cadenas',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => 'Los tipos',
  ),
  'prev' => 
  array (
    0 => 'language.types.float.php',
    1 => 'N&uacute;meros de punto flotante',
  ),
  'next' => 
  array (
    0 => 'language.types.numeric-strings.php',
    1 => 'Strings num&eacute;ricos',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'language/types/string.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

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

 <p class="para">
  Un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> es una serie de caracteres, donde un caracter
  es lo mismo que un octeto. Esto significa que PHP solo admite un conjunto
  de 256 caracteres, y por lo tanto no ofrece soporte nativo para Unicode. Ver
  <a href="language.types.string.php#language.types.string.details" class="link">los detalles del tipo string</a>.
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <span class="simpara">
   En las versiones de 32 bits, un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> puede ser tan grande como 2 Go
   (2147483647 octetos maximo)
  </span>
 </p></blockquote>

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

  <p class="para">
   Un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> literal puede especificarse de cuatro maneras diferentes:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.single" class="link">entre comillas simples</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.double" class="link">entre comillas dobles</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">sintaxis heredoc</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.nowdoc" class="link">sintaxis nowdoc</a>
    </span>
   </li>
  </ul>

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

   <p class="para">
    La manera más simple de especificar un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> es encerrarlo entre
    comillas simples (el caracter <code class="literal">&#039;</code>).
   </p>

   <p class="para">
    Para especificar una comilla simple literal, escápela con un backslash
    (<code class="literal">\</code>). Para especificar un backslash literal, duplíquelo
    (<code class="literal">\\</code>). Todas las demás ocurrencias del backslash serán tratadas
    como un backslash literal: esto significa que otras secuencias de escape que usted
    podría conocer, tales como <code class="literal">\r</code> o <code class="literal">\n</code>,
    serán salidas literalmente como se especifica en lugar de tener un significado especial.
   </p>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     A diferencia de las <a href="language.types.string.php#language.types.string.syntax.double" class="link">comillas dobles</a>
     y <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">sintaxis heredoc</a>,
     las <a href="language.variables.php" class="link">variables</a> y las secuencias de escape
     para caracteres especiales <em>no</em> serán extendidas
     cuando se encuentren en <span class="type">strings</span> entre comillas simples.
    </span>
   </p></blockquote>

   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Variantes de sintaxis</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'esto es un string simple'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">'Usted puede también tener nuevas líneas integradas<br />en los strings de esta manera, ya que<br />es aceptable hacerlo.'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Muestra: Arnold dijo una vez: "Volveré"<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Arnold dijo una vez: "Volveré"'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Muestra: ¿Usted ha borrado C:\*.*?<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'¿Usted ha borrado C:\\*.* ?'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Muestra: ¿Usted ha borrado C:\*.*?<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'¿Usted ha borrado C:\*.* ?'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Muestra: Esto no se extenderá: \n una nueva línea<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Esto no se\'extenderá: \n una nueva línea'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Muestra: Las variables no $se\'extienden $tampoco<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Las variables no $se\'extienden $tampoco'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  </div>

  <div class="sect3" id="language.types.string.syntax.double">
   <h4 class="title">Entre comillas dobles</h4>

   <p class="para">
    Si el <span class="type"><a href="language.types.string.php" class="type string">string</a></span> está encerrado entre comillas dobles (<code class="literal">&quot;</code>), PHP interpretará
    las siguientes secuencias de escape para caracteres especiales:
   </p>

   <table class="doctable table">
    <caption><strong>Caracteres escapados</strong></caption>

    
     <thead>
      <tr>
       <th>Secuencia</th>
       <th>Significado</th>
      </tr>

     </thead>


     <tbody class="tbody">
      <tr>
       <td><code class="literal">\n</code></td>
       <td>retorno de carro (LF o 0x0A (10) en ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\r</code></td>
       <td>retorno de carro (CR o 0x0D (13) en ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\t</code></td>
       <td>tabulación horizontal (HT o 0x09 (9) en ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\v</code></td>
       <td>tabulación vertical (VT o 0x0B (11) en ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\e</code></td>
       <td>escape (ESC o 0x1B (27) en ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\f</code></td>
       <td>avance de formulario (FF o 0x0C (12) en ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\\</code></td>
       <td>backslash</td>
      </tr>

      <tr>
       <td><code class="literal">\$</code></td>
       <td>signo de dólar</td>
      </tr>

      <tr>
       <td><code class="literal">\&quot;</code></td>
       <td>comilla doble</td>
      </tr>

      <tr>
       <td><code class="literal">\[0-7]{1,3}</code></td>
       <td>
        Octal: la secuencia de caracteres correspondiente a la expresión regular <code class="literal">[0-7]{1,3}</code>
        es un caracter en notación octal (por ejemplo, <code class="literal">&quot;\101&quot; === &quot;A&quot;</code>),
        que desborda silenciosamente para adaptarse a un octeto (por ejemplo, <code class="literal">&quot;\400&quot; === &quot;\000&quot;</code>)
       </td>
      </tr>

      <tr>
       <td><code class="literal">\x[0-9A-Fa-f]{1,2}</code></td>
       <td>
        Hexadecimal: la secuencia de caracteres correspondiente a la expresión regular
        <code class="literal">[0-9A-Fa-f]{1,2}</code> es un caracter en notación hexadecimal
        (por ejemplo, <code class="literal">&quot;\x41&quot; === &quot;A&quot;</code>)
       </td>
      </tr>

      <tr>
       <td><code class="literal">\u{[0-9A-Fa-f]+}</code></td>
       <td>
        Unicode: la secuencia de caracteres correspondiente a la expresión regular <code class="literal">[0-9A-Fa-f]+</code>
        es un punto de código Unicode, que será salido en el string bajo la representación UTF-8 de este punto de código.
        Las llaves son requeridas en la secuencia. Por ejemplo, <code class="literal">&quot;\u{41}&quot; === &quot;A&quot;</code>
       </td>
      </tr>

     </tbody>
    
   </table>

<p class="para">
    Como para los <span class="type">strings</span> entre comillas simples, escapar cualquier otro caracter
    también resultará en la impresión del backslash.
</p>

<p class="para">
    La característica más importante de los <span class="type">strings</span> entre comillas dobles es el hecho
    de que los nombres de variables serán extendidos. Ver
    <a href="language.types.string.php#language.types.string.parsing" class="link">la interpolación de strings</a> para
    más detalles.
</p>
</div>

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

   <p class="simpara">
    Una tercera manera de delimitar los <span class="type">strings</span> es la sintaxis heredoc:
    <code class="literal">&lt;&lt;&lt;</code>. Después de este operador, se
    proporciona un identificador, luego una nueva línea. El <span class="type"><a href="language.types.string.php" class="type string">string</a></span> mismo sigue, luego
    el mismo identificador nuevamente para cerrar la cita.
   </p>

   <p class="simpara">
    El identificador de cierre puede estar indentado con espacios o tabulaciones, en cuyo caso
    la indentación será eliminada de todas las líneas en el string doc.
    Antes de PHP 7.3.0, el identificador de cierre <em>debe</em>
    comenzar en la primera columna de la línea.
   </p>

   <p class="simpara">
    Además, el identificador de cierre debe seguir las mismas reglas de nombramiento que cualquier
    otro etiqueta en PHP: debe contener solo caracteres alfanuméricos y guiones bajos,
    y debe comenzar con un carácter no numérico o un guión bajo.
   </p>

   <div class="example" id="example-2">
    <p><strong>Ejemplo #2 Ejemplo básico de Heredoc a partir de PHP 7.3.0</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// sin indentación<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">      a<br />     b<br />    c<br />\n<br /></span><span style="color: #007700">END;<br /><br /></span><span style="color: #FF8000">// 4 espacios de indentación<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">      a<br />     b<br />    c<br /></span><span style="color: #007700">    END;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Resultado del ejemplo anterior en PHP 7.3:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
      a
     b
    c

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

   <p class="simpara">
    Si el identificador de cierre está indentado más que cualquier línea del cuerpo, entonces se levantará un <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>:
   </p>

   <div class="example" id="example-3">
    <p><strong>Ejemplo #3 El identificador de cierre no debe estar indentado más que cualquier línea del cuerpo</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">  a<br /> b<br />c<br /></span><span style="color: #007700">   END;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Resultado del ejemplo anterior en PHP 7.3:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: Invalid body indentation level (expecting an indentation level of at least 3) in example.php on line 4
</pre></div>
    </div>
   </div>

   <p class="simpara">
    Si el identificador de cierre está indentado, las tabulaciones también pueden ser utilizadas, sin embargo,
    las tabulaciones y los espacios <em>no deben</em> mezclarse en cuanto a
    la indentación del identificador de cierre y la indentación del cuerpo
    (hasta el identificador de cierre). En cualquiera de estos casos, se levantará un <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>.

    Estas restricciones de espacio han sido incluidas porque mezclar espacios y tabulaciones para la indentación perjudica la legibilidad.
   </p>

   <div class="example" id="example-4">
    <p><strong>Ejemplo #4 Indentación diferente para el cuerpo (espacios) identificador de cierre</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Todo el código siguiente no funciona.<br /><br />// indentación diferente para el cuerpo (espacios) marcador de fin (tabulaciones)<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">        a<br /></span><span style="color: #007700">        END;<br />}<br /><br /></span><span style="color: #FF8000">// mezcla de espacios y tabulaciones en el cuerpo<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">            a<br /></span><span style="color: #007700">        END;<br />}<br /><br /></span><span style="color: #FF8000">// mezcla de espacios y tabulaciones en el marcador de fin<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">            a<br /></span><span style="color: #007700">        END;<br />}</span></span></code></div>
    </div>

    <div class="example-contents"><p>Resultado del ejemplo anterior en PHP 7.3:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: Invalid indentation - tabs and spaces cannot be mixed in example.php line 8
</pre></div>
    </div>
   </div>

   <p class="simpara">
    El identificador de cierre para el string del cuerpo no es requerido para ser
    seguido de un punto y coma o un salto de línea. Por ejemplo, el siguiente
    código es permitido a partir de PHP 7.3.0:
   </p>

   <div class="example" id="example-5">
    <p><strong>Ejemplo #5 Continuación de una expresión después de un identificador de cierre</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$values </span><span style="color: #007700">= [&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br />  b<br />    c<br /></span><span style="color: #007700">END, </span><span style="color: #DD0000">'d e f'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$values</span><span style="color: #007700">);</span></span></code></div>
    </div>

    <div class="example-contents"><p>Resultado del ejemplo anterior en PHP 7.3:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(2) {
  [0] =&gt;
  string(11) &quot;a
  b
    c&quot;
  [1] =&gt;
  string(5) &quot;d e f&quot;
}
</pre></div>
    </div>
   </div>

   <div class="warning"><strong class="warning">Advertencia</strong>
    <p class="simpara">
     Si el identificador de cierre ha sido encontrado al principio de una línea, entonces
     no importa si formaba parte de otra palabra, puede ser considerado
     como el identificador de cierre y provocar un <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>.
    </p>

    <div class="example" id="example-6">
     <p><strong>Ejemplo #6 El identificador de cierre en el cuerpo del string tiende a provocar un ParseError</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$values </span><span style="color: #007700">= [&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br />b<br /></span><span style="color: #007700">END </span><span style="color: #0000BB">ING<br />END</span><span style="color: #007700">, </span><span style="color: #DD0000">'d e f'</span><span style="color: #007700">];</span></span></code></div>
     </div>

     <div class="example-contents"><p>Resultado del ejemplo anterior en PHP 7.3:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: syntax error, unexpected identifier &quot;ING&quot;, expecting &quot;]&quot; in example.php on line 5
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Para evitar este problema, es seguro seguir la regla simple:
     <em>no elegir una palabra que aparezca en el cuerpo del texto
     como identificador de cierre</em>.
    </p>

   </div>

   <div class="warning"><strong class="warning">Advertencia</strong>
    <p class="simpara">
     Antes de PHP 7.3.0, es muy importante señalar que la línea que contiene el
     identificador de cierre no debe contener ningún otro carácter, excepto un punto y coma
     (<code class="literal">;</code>).
     Esto significa principalmente que el identificador
     <em>no puede estar indentado</em>, y no debe haber espacios
     o tabulaciones antes o después del punto y coma. También es importante darse cuenta de que
     el primer carácter antes del identificador de cierre debe ser un salto de línea tal como
     se define en el sistema operativo local. Es <code class="literal">\n</code> en
     los sistemas UNIX, incluyendo macOS. El delimitador de cierre también debe ser
     seguido de un salto de línea.
    </p>

    <p class="simpara">
     Si esta regla se viola y el identificador de cierre no está &quot;limpio&quot;, no será
     considerado como un identificador de cierre, y PHP continuará buscando uno. Si un
     identificador de cierre adecuado no se encuentra antes del final del archivo
     actual, se producirá un error de análisis en la última línea.
    </p>

    <div class="example" id="example-7">
     <p><strong>Ejemplo #7 Ejemplo inválido, antes de PHP 7.3.0</strong></p>
     <div class="example-contents">
      
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">    EOT;<br />}<br /></span><span style="color: #FF8000">// El identificador no debe estar indentado<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

    </div>

    <p class="para">
     Los heredocs que contienen variables no pueden ser utilizados para inicializar propiedades de clase.
    </p>

   </div>

   <p class="para">
    El texto heredoc se comporta exactamente como un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> entre comillas dobles, sin las comillas. Esto significa que las comillas en un heredoc no necesitan ser escapadas, pero los códigos de escape mencionados anteriormente pueden seguir siendo utilizados. Las variables son desarrolladas, pero debe tenerse el mismo cuidado al expresar variables complejas dentro de un heredoc que para los <span class="type">strings</span>.
   </p>

   <div class="example" id="example-9">
    <p><strong>Ejemplo #9 Ejemplo de cita de string heredoc</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$str </span><span style="color: #007700">= &lt;&lt;&lt;EOD<br /></span><span style="color: #DD0000">Ejemplo de string<br />que se extiende sobre múltiples líneas<br />usando la sintaxis heredoc.<br /></span><span style="color: #007700">EOD;<br /><br /></span><span style="color: #FF8000">/* Ejemplo más complejo, con variables. */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    var </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br />    var </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /><br />    function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Foo'</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'Bar1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar3'</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'MyName'</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">Mi nombre es "</span><span style="color: #0000BB">$name</span><span style="color: #DD0000">". Estoy imprimiendo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo</span><span style="color: #DD0000">.<br />Ahora, estoy imprimiendo </span><span style="color: #007700">{</span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]}</span><span style="color: #DD0000">.<br />Esto debería imprimir una 'A' mayúscula: \x41<br /></span><span style="color: #007700">EOT;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Mi nombre es &quot;MyName&quot;. Estoy imprimiendo Foo.
Ahora, estoy imprimiendo Bar2.
Esto debería imprimir una &#039;A&#039; mayúscula: A</pre></div>
    </div>
   </div>

   <p class="para">
    También es posible utilizar la sintaxis heredoc para pasar datos a los argumentos de función:
   </p>

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

   </div>

   <p class="para">
    Es posible inicializar variables estáticas y propiedades/constantes de clase utilizando la sintaxis heredoc:
   </p>

   <div class="example" id="example-11">
    <p><strong>Ejemplo #11 Uso de Heredoc para inicializar valores estáticos</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Variables estáticas<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />{<br />    static </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;LABEL<br /></span><span style="color: #DD0000">Nada aquí...<br /></span><span style="color: #007700">LABEL;<br />}<br /><br /></span><span style="color: #FF8000">// Propiedades/constantes de clase<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    const </span><span style="color: #0000BB">BAR </span><span style="color: #007700">= &lt;&lt;&lt;FOOBAR<br /></span><span style="color: #DD0000">Ejemplo de constante<br /></span><span style="color: #007700">FOOBAR;<br /><br />    public </span><span style="color: #0000BB">$baz </span><span style="color: #007700">= &lt;&lt;&lt;FOOBAR<br /></span><span style="color: #DD0000">Ejemplo de propiedad<br /></span><span style="color: #007700">FOOBAR;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    El identificador de apertura del Heredoc puede eventualmente ser
    encerrado entre comillas dobles:
   </p>

   <div class="example" id="example-12">
    <p><strong>Ejemplo #12 Uso de comillas dobles en el Heredoc</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;"FOOBAR"<br /></span><span style="color: #DD0000">¡Hola mundo!<br /></span><span style="color: #007700">FOOBAR;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  </div>

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

   <p class="para">
    Los nowdocs son para los strings entre comillas simples lo que los heredocs son para los strings entre comillas dobles. Un nowdoc se especifica de manera similar a un heredoc, pero <em>ninguna interpolación de string es realizada</em> dentro de un nowdoc. La construcción es ideal para integrar código PHP o otros bloques de texto voluminosos sin necesidad de escapar. Comparte algunas características con la construcción SGML
    <code class="literal">&lt;![CDATA[ ]]&gt;</code>, en el sentido de que declara
    un bloque de texto que no está destinado a ser analizado.
   </p>

   <p class="para">
    Un nowdoc es identificado por la misma secuencia <code class="literal">&lt;&lt;&lt;</code>
    utilizada para los heredocs, pero el identificador que sigue está encerrado entre comillas simples, por ejemplo <code class="literal">&lt;&lt;&lt;&#039;EOT&#039;</code>. Todas las reglas para los identificadores heredoc se aplican también a los identificadores nowdoc, en particular aquellas concernientes a la apariencia del identificador de cierre.
   </p>

   <div class="example" id="example-13">
    <p><strong>Ejemplo #13 Ejemplo de cita de string nowdoc</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;'EOD'<br /></span><span style="color: #DD0000">Ejemplo de string que se extiende sobre múltiples líneas<br />usando la sintaxis nowdoc. Las barras invertidas son siempre tratadas literalmente,<br />es decir \\ y \'.<br /></span><span style="color: #007700">EOD;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Ejemplo de string que se extiende sobre múltiples líneas
usando la sintaxis nowdoc. Las barras invertidas son siempre tratadas literalmente,
es decir \\ y \&#039;.
</pre></div>
    </div>
   </div>

   <div class="example" id="example-14">
    <p><strong>Ejemplo #14 Ejemplo de cita de string nowdoc con variables</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /><br />    function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Foo'</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'Bar1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar3'</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'MyName'</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;'EOT'<br /></span><span style="color: #DD0000">Mi nombre es "$name". Estoy imprimiendo $foo-&gt;foo.<br />Ahora, estoy imprimiendo {$foo-&gt;bar[1]}.<br />Esto no debería imprimir una 'A' mayúscula: \x41<br /></span><span style="color: #007700">EOT;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Mi nombre es &quot;$name&quot;. Estoy imprimiendo $foo-&gt;foo.
Ahora, estoy imprimiendo {$foo-&gt;bar[1]}.
Esto no debería imprimir una &#039;A&#039; mayúscula: \x41</pre></div>
    </div>
   </div>

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

   </div>

  </div>

  <div class="sect3" id="language.types.string.parsing">
   <h4 class="title">Interpolación de strings</h4>

   <p class="simpara">
    Cuando un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> es especificado entre comillas dobles o con heredoc,
    las <a href="language.variables.php" class="link">variables</a> pueden ser sustituidas dentro.
   </p>

   <p class="simpara">
    Existen dos tipos de sintaxis: una
    <a href="language.types.string.php#language.types.string.parsing.basic" class="link">básica</a> y una
    <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">avanzada</a>.
    La sintaxis básica es la más común y práctica. Ofrece un medio para incorporar una variable,
    un valor <span class="type"><a href="language.types.array.php" class="type array">array</a></span> o una propiedad <span class="type">objeto</span> en un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> con un mínimo de esfuerzo.
   </p>

   <div class="sect4" id="language.types.string.parsing.basic">
    <h5 class="title">Sintaxis básica</h5>
    <p class="simpara">
     Si un signo de dólar (<code class="literal">$</code>) es encontrado, los caracteres que lo siguen y que pueden ser utilizados en un nombre de variable serán interpretados como tales y sustituidos.
    </p>
    <div class="example" id="example-16">
     <p><strong>Ejemplo #16 Interpolación de strings</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$juice </span><span style="color: #007700">= </span><span style="color: #DD0000">"manzana"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Él bebió un poco de </span><span style="color: #0000BB">$juice</span><span style="color: #DD0000"> jugo." </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Él bebió un poco de manzana jugo.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Formalmente, la estructura para la sintaxis de sustitución de variable básica es la siguiente:
    </p>
    <div class="informalexample">
     <div class="example-contents">
<div class="annotation-interactive cdata"><pre>
string-variable::
     variable-name   (offset-or-property)?
   | ${   expression   }

offset-or-property::
     offset-in-string
   | property-in-string

offset-in-string::
     [   name   ]
   | [   variable-name   ]
   | [   integer-literal   ]

property-in-string::
     -&gt;  name

variable-name::
     $   name

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

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

    </div>

    <div class="warning"><strong class="warning">Advertencia</strong>
     <p class="para">
      La sintaxis <code class="literal">${ expression }</code> está deprecada desde
      PHP 8.2.0, ya que puede ser interpretada como
      <a href="language.variables.variable.php" class="link">variables de variables</a>:
      <div class="informalexample">
       <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"</span><span style="color: #007700">${</span><span style="color: #0000BB">foo</span><span style="color: #007700">}</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"</span><span style="color: #007700">${(</span><span style="color: #0000BB">foo</span><span style="color: #007700">)}</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
       </div>

       <p class="para">Resultado del ejemplo anterior en PHP 8.2:</p>
       <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Deprecated: Usar ${var} en strings está deprecado, use {$var} en su lugar en el archivo en la línea 6

Deprecated: Usar ${expr} (variables de variables) en strings está deprecado, use {${expr}} en su lugar en el archivo en la línea 9
string(3) &quot;foo&quot;
string(3) &quot;bar&quot;
</pre></div>
       </div>
       <p class="para">El ejemplo anterior mostrará:</p>
       <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
string(3) &quot;foo&quot;
string(3) &quot;bar&quot;
</pre></div>
       </div>
      </div>
      La sintaxis de interpolación de string <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">avanzada</a> debería ser utilizada en su lugar.
     </p>
    </div>

    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      Si no es posible formar un nombre válido, el signo de dólar
      tal cual en el string:
     </span>
     <div class="informalexample">
      <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Ninguna interpolación $  ha ocurrido\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Ninguna interpolación $\n ha ocurrido\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Ninguna interpolación $2 ha ocurrido\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <p class="para">El ejemplo anterior mostrará:</p>
      <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Ninguna interpolación $  ha ocurrido
Ninguna interpolación $
 ha ocurrido
Ninguna interpolación $2 ha ocurrido
</pre></div>
      </div>
    </div>
    </p></blockquote>

    <div class="example" id="example-17">
     <p><strong>Ejemplo #17 Interpolación del valor de la primera dimensión de un array o propiedad</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$juices </span><span style="color: #007700">= array(</span><span style="color: #DD0000">"manzana"</span><span style="color: #007700">, </span><span style="color: #DD0000">"naranja"</span><span style="color: #007700">, </span><span style="color: #DD0000">"string_key" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"violet"</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Él bebió un poco de </span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]</span><span style="color: #DD0000"> jugo."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Él bebió un poco de </span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]</span><span style="color: #DD0000"> jugo."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Él bebió un poco de </span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">string_key</span><span style="color: #007700">]</span><span style="color: #DD0000"> jugo."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$s </span><span style="color: #007700">= </span><span style="color: #DD0000">"string"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">();<br /><br />echo </span><span style="color: #DD0000">"Valor del objeto: </span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">s</span><span style="color: #DD0000">."</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Él bebió un poco de manzana jugo.
Él bebió un poco de naranja jugo.
Él bebió un poco de violet jugo.
Valor del objeto: string.
</pre></div>
     </div>
    </div>

    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      La clave del array debe ser no citada, y por lo tanto no es posible
      referenciar una constante como clave con la sintaxis básica. Utilice la
      sintaxis <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">avanzada</a>
      en su lugar.
     </span>
    </p></blockquote>

    <p class="simpara">
     Desde PHP 7.1.0, los índices numéricos <em>negativos</em> también
     son soportados.
    </p>

    <div class="example" id="example-18"><p><strong>Ejemplo #18 Índices numéricos negativos</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$string </span><span style="color: #007700">= </span><span style="color: #DD0000">'string'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"El carácter en el índice -2 es </span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">2</span><span style="color: #007700">]</span><span style="color: #DD0000">."</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">3</span><span style="color: #007700">] = </span><span style="color: #DD0000">'o'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Cambiar el carácter en el índice -3 a o da </span><span style="color: #0000BB">$string</span><span style="color: #DD0000">."</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
El carácter en el índice -2 es n.
Cambiar el carácter en el índice -3 a o da strong.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Para todo lo que es más complejo, la
     <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">sintaxis avanzada</a>
     debe ser utilizada.
    </p>
   </div>

   <div class="sect4" id="language.types.string.parsing.advanced">
    <h5 class="title">Sintaxis avanzada (sintaxis de llaves)</h5>

    <p class="simpara">
     La sintaxis avanzada permite la interpolación de
     <em>variables</em> con accesorios arbitrarios.
    </p>

    <p class="simpara">
     Cualquier variable escalar, elemento de array o propiedad de objeto
     (<span class="modifier">estática</span> o no) con una representación
     <span class="type"><a href="language.types.string.php" class="type string">string</a></span> puede ser incluida mediante esta sintaxis.
     La expresión es escrita de la misma manera que aparecería fuera de la
     <span class="type"><a href="language.types.string.php" class="type string">string</a></span>, luego encerrada entre <code class="literal">{</code> y
     <code class="literal">}</code>. Dado que <code class="literal">{</code> no puede ser escapado, esta
     sintaxis solo será reconocida cuando el <code class="literal">$</code> siga inmediatamente al
     <code class="literal">{</code>. Utilice <code class="literal">{\$</code> para obtener un
     <code class="literal">{$</code>. Aquí hay algunos ejemplos para aclarar:
    </p>

     <div class="example" id="example-19">
     <p><strong>Ejemplo #19 Sintaxis con llaves</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">DATA_KEY </span><span style="color: #007700">= </span><span style="color: #DD0000">'const-key'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$great </span><span style="color: #007700">= </span><span style="color: #DD0000">'fantástico'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= [<br />    </span><span style="color: #DD0000">'1'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'2'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'3'</span><span style="color: #007700">,<br />    [</span><span style="color: #0000BB">41</span><span style="color: #007700">, </span><span style="color: #0000BB">42</span><span style="color: #007700">, </span><span style="color: #0000BB">43</span><span style="color: #007700">],<br />    </span><span style="color: #DD0000">'key' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Valor indexado'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'const-key' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Clave con un signo menos'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'foo' </span><span style="color: #007700">=&gt; [</span><span style="color: #DD0000">'foo1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'foo2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'foo3'</span><span style="color: #007700">]<br />];<br /><br /></span><span style="color: #FF8000">// No funcionará, mostrará: Esto es { fantástico}<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Esto es { </span><span style="color: #0000BB">$great</span><span style="color: #DD0000">}" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Funciona, mostrará: Esto es fantástico<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Esto es </span><span style="color: #007700">{</span><span style="color: #0000BB">$great</span><span style="color: #007700">}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Para mostrar llaves en la salida:<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Esto es {</span><span style="color: #007700">{</span><span style="color: #0000BB">$great</span><span style="color: #007700">}</span><span style="color: #DD0000">}" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">Square </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$width</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">int $width</span><span style="color: #007700">) { </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">width </span><span style="color: #007700">= </span><span style="color: #0000BB">$width</span><span style="color: #007700">; }<br />}<br /><br /></span><span style="color: #0000BB">$square </span><span style="color: #007700">= new </span><span style="color: #0000BB">Square</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Funciona<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Este cuadrado mide </span><span style="color: #007700">{</span><span style="color: #0000BB">$square</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">width</span><span style="color: #007700">}</span><span style="color: #DD0000">00 centímetros de ancho." </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Funciona, las claves entre comillas solo funcionan con la sintaxis de llaves<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Esto funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'key'</span><span style="color: #007700">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Funciona<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Esto funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">][</span><span style="color: #0000BB">2</span><span style="color: #007700">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Esto funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">DATA_KEY</span><span style="color: #007700">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Al utilizar arrays multidimensionales, siempre use llaves alrededor de los arrays<br />// cuando estén dentro de strings<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Esto funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">][</span><span style="color: #0000BB">2</span><span style="color: #007700">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Esto funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">values</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">]-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Esto funciona: </span><span style="color: #007700">{</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$staticProp</span><span style="color: #007700">}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// No funcionará, mostrará: C:\directory\{fantástico}.txt<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"C:\directory\{</span><span style="color: #0000BB">$great</span><span style="color: #DD0000">}.txt" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Funciona, mostrará: C:\directory\fantástico.txt<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"C:\\directory\\</span><span style="color: #007700">{</span><span style="color: #0000BB">$great</span><span style="color: #007700">}</span><span style="color: #DD0000">.txt" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      Como esta sintaxis permite expresiones arbitrarias, es posible utilizar
      <a href="language.variables.variable.php" class="link">variables de variables</a>
      en la sintaxis avanzada.
     </span>
    </p></blockquote>
   </div>
  </div>

  <div class="sect3" id="language.types.string.substr">
   <h4 class="title">Acceso y modificación de string por carácter</h4>

   <p class="para">
    Los caracteres en los <span class="type">strings</span> pueden ser accedidos y modificados especificando
    el offset basado en cero del carácter deseado después del
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span> utilizando corchetes <span class="type"><a href="language.types.array.php" class="type array">array</a></span>, como en
    <var class="varname">$str[42]</var>. Piense en un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> como un
    <span class="type"><a href="language.types.array.php" class="type array">array</a></span> de caracteres para este propósito. Las funciones
    <span class="function"><a href="function.substr.php" class="function">substr()</a></span> y <span class="function"><a href="function.substr-replace.php" class="function">substr_replace()</a></span>
    pueden ser utilizadas cuando se desea extraer o reemplazar más de un carácter.
   </p>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Desde PHP 7.1.0, los offsets de string negativos también son soportados. Estos especifican
     el offset desde el final del string.
     Anteriormente, los offsets negativos emitían <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> para la lectura
     (produciendo un string vacío) y <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> para la escritura
     (dejando el string intacto).
    </span>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Antes de PHP 8.0.0, los <span class="type">strings</span> también podían ser accedidos utilizando llaves, como en
     <var class="varname">$str{42}</var>, para el mismo propósito.
     Esta sintaxis de llaves fue deprecada desde PHP 7.4.0 y ya no es soportada desde PHP 8.0.0.
    </span>
   </p></blockquote>

   <div class="warning"><strong class="warning">Advertencia</strong>
    <p class="simpara">
     Escribir en un offset fuera de alcance llena el string con espacios.
     Los tipos no enteros son convertidos a entero.
     Un tipo de offset ilegal emite <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
     Solo el primer carácter de un string asignado es utilizado.
     Desde PHP 7.1.0, asignar un string vacío genera un error fatal. Anteriormente,
     esto asignaba un octeto NULL.
    </p>
   </div>

   <div class="warning"><strong class="warning">Advertencia</strong>
    <p class="simpara">
     Internamente, los strings PHP son arrays de octetos. En consecuencia, acceder o
     modificar un string utilizando corchetes de array no es seguro para multi-octetos, y
     solo debe hacerse con strings en codificación de un solo octeto como ISO-8859-1.
    </p>
   </div>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Desde PHP 7.1.0, aplicar el operador de índice vacío a un string vacío genera un error fatal.
     Anteriormente, el string vacío era silenciosamente convertido a array.
    </span>
   </p></blockquote>

   <div class="example" id="example-20">
    <p><strong>Ejemplo #20 Algunos ejemplos de strings</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Obtener el primer carácter de un string<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Esto es una prueba.'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$first </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$first</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Obtener el tercer carácter de un string<br /></span><span style="color: #0000BB">$third </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$third</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Obtener el último carácter de un string.<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Esto sigue siendo una prueba.'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$last </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)-</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$last</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Modificar el último carácter de un string<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Mire el mar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)-</span><span style="color: #0000BB">1</span><span style="color: #007700">] = </span><span style="color: #DD0000">'e'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Los offsets de string deben ser enteros o strings que parezcan enteros,
    de lo contrario se emitirá una advertencia.
   </p>

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

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
bool(true)
string(1) &quot;b&quot;

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

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

bool(false)

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

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="para">
     Acceder a variables de otros tipos (excepto arrays u objetos
     que implementen las interfaces apropiadas) utilizando <code class="literal">[]</code> o
     <code class="literal">{}</code> devuelve silenciosamente <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="para">
     Los caracteres en literales de string pueden ser accedidos
     utilizando <code class="literal">[]</code> o <code class="literal">{}</code>.
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="para">
     Acceder a caracteres en literales de string utilizando la
     sintaxis <code class="literal">{}</code> fue deprecada en PHP 7.4.
     Esto fue eliminado en PHP 8.0.
    </p>
   </p></blockquote>
  </div>
 </div>

 <div class="sect2" id="language.types.string.useful-funcs">
  <h3 class="title">Funciones y operadores útiles</h3>

  <p class="para">
   Los <span class="type">strings</span> pueden ser concatenados utilizando el operador &#039;.&#039; (punto). Tenga en cuenta
   que el operador &#039;+&#039; (suma) <em>no</em> funcionará para esto.
   Consulte <a href="language.operators.string.php" class="link">los operadores de string</a> para
   más información.
  </p>

  <p class="para">
   Existen varias funciones útiles para la manipulación de <span class="type">strings</span>.
  </p>

  <p class="simpara">
   Consulte la <a href="ref.strings.php" class="link">sección de funciones de string</a> para
   funciones generales, y la <a href="ref.pcre.php" class="link">sección de funciones de expresiones regulares compatibles con Perl</a> para
   funcionalidades avanzadas de búsqueda y reemplazo.
  </p>

  <p class="simpara">
   También existen <a href="ref.url.php" class="link">funciones para strings de URL</a>, y
   funciones para cifrar/descifrar strings
   (<a href="ref.sodium.php" class="link">Sodium</a> y
   <a href="ref.hash.php" class="link">Hash</a>).
  </p>

  <p class="simpara">
   Finalmente, consulte también las <a href="ref.ctype.php" class="link">funciones de tipo de carácter</a>.
  </p>
 </div>

 <div class="sect2" id="language.types.string.casting">
  <h3 class="title">Conversión a string</h3>

  <p class="para">
   Un valor puede ser convertido a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> utilizando el
   cast <code class="literal">(string)</code> o la función <span class="function"><a href="function.strval.php" class="function">strval()</a></span>.
   La conversión a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> es realizada automáticamente en el contexto de una
   expresión donde un <span class="type"><a href="language.types.string.php" class="type string">string</a></span> es necesario. Esto ocurre al utilizar las
   funciones <span class="function"><a href="function.echo.php" class="function">echo</a></span> o <span class="function"><a href="function.print.php" class="function">print</a></span>, o cuando
   una variable es comparada con un <span class="type"><a href="language.types.string.php" class="type string">string</a></span>. Las secciones sobre
   <a href="language.types.php" class="link">Tipos</a> y
   <a href="language.types.type-juggling.php" class="link">Type Juggling</a> aclararán
   lo siguiente. Ver también la función <span class="function"><a href="function.settype.php" class="function">settype()</a></span>.
  </p>

  <p class="para">
   Un valor <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> es convertido al <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   <code class="literal">&quot;1&quot;</code>. El <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> es convertido a
   <code class="literal">&quot;&quot;</code> (el string vacío). Esto permite una conversión de ida y vuelta entre
   los valores <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> y <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
  </p>

  <p class="para">
   Un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> o <span class="type"><a href="language.types.float.php" class="type float">float</a></span> es convertido a un
   <span class="type"><a href="language.types.string.php" class="type string">string</a></span> representando el número textualmente (incluyendo la
   parte exponencial para los <span class="type"><a href="language.types.float.php" class="type float">float</a></span>). Los números de punto flotante pueden ser
   convertidos utilizando la notación exponencial (<code class="literal">4.1E+6</code>).
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    A partir de PHP 8.0.0, el carácter de la coma decimal es siempre
    un punto (&quot;<code class="literal">.</code>&quot;). Antes de PHP 8.0.0,
    el carácter de la coma decimal está definido en la localización del script (categoría
    LC_NUMERIC). Consulte la función <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span>.
   </p>
  </p></blockquote>

  <p class="para">
   Los <span class="type">arrays</span> siempre son convertidos al <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   <code class="literal">&quot;Array&quot;</code>; por lo tanto, <span class="function"><a href="function.echo.php" class="function">echo</a></span> y
   <span class="function"><a href="function.print.php" class="function">print</a></span> no pueden por sí solos mostrar el contenido de un
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. Para mostrar un solo elemento, utilice una construcción como
   <code class="literal">echo $arr[&#039;foo&#039;]</code>. Consulte a continuación consejos para visualizar todo el contenido.
  </p>

  <p class="para">
   Para convertir <span class="type">objetos</span> a <span class="type">strings</span>, el método mágico
   <a href="language.oop5.magic.php" class="link">__toString</a> debe ser utilizado.
  </p>

  <p class="para">
   Los <span class="type">recursos</span> siempre son convertidos a <span class="type">strings</span> con la
   estructura <code class="literal">&quot;Resource id #1&quot;</code>, donde <code class="literal">1</code>
   es el número de recurso asignado al <span class="type">recurso</span> por PHP en
   tiempo de ejecución. Aunque la estructura exacta de este string no debe ser considerada como
   confiable y está sujeta a cambios, siempre será única para un recurso dado
   durante la duración de ejecución de un script (es decir, una solicitud web o un proceso CLI)
   y no será reutilizada. Para obtener el tipo de un <span class="type">recurso</span>, utilice
   la función <span class="function"><a href="function.get-resource-type.php" class="function">get_resource_type()</a></span>.
  </p>

  <p class="para">
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> siempre es convertido a un string vacío.
  </p>

  <p class="para">
   Como se indicó anteriormente, convertir directamente un <span class="type"><a href="language.types.array.php" class="type array">array</a></span>,
   un <span class="type">objeto</span> o un <span class="type">recurso</span> a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> no proporciona
   información útil sobre el valor más allá de su tipo. Consulte las funciones
   <span class="function"><a href="function.print-r.php" class="function">print_r()</a></span> y <span class="function"><a href="function.var-dump.php" class="function">var_dump()</a></span> para
   medios más eficaces de inspeccionar el contenido de estos tipos.
  </p>

  <p class="para">
   La mayoría de los valores PHP también pueden ser convertidos a <span class="type">strings</span> para un almacenamiento permanente.
   Este método se denomina serialización y es realizado por la función
   <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span>.
  </p>

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

  <h3 class="title">Detalles del tipo string</h3>

  <p class="para">
   El <span class="type"><a href="language.types.string.php" class="type string">string</a></span> en PHP está implementado como un array de octetos y un
   entero indicando la longitud del búfer. No tiene ninguna información sobre cómo
   estos octetos se traducen en caracteres, dejando esta tarea al programador.
   No hay limitaciones sobre los valores de los que el string puede estar compuesto; en
   particular, los octetos de valor <code class="literal">0</code> («octetos NUL») son permitidos
   en cualquier parte del string (aunque algunas funciones, dichas en este manual de no
   ser «seguras para binarios», pueden pasar los strings a bibliotecas
   que ignoran los datos después de un octeto NUL.)
  </p>
  <p class="para">
   Esta naturaleza del tipo string explica por qué no hay un tipo «octeto» distinto
   en PHP - los strings toman este rol. Las funciones que no devuelven datos
   textuales - por ejemplo, datos arbitrarios leídos desde un socket de red -
   devolverán strings de todos modos.
  </p>
  <p class="para">
   Dado que PHP no dicta una codificación específica para los strings, uno podría
   preguntarse cómo los literales de string están codificados. Por ejemplo, el string
   <code class="literal">&quot;á&quot;</code> ¿es equivalente a <code class="literal">&quot;\xE1&quot;</code> (ISO-8859-1),
   <code class="literal">&quot;\xC3\xA1&quot;</code> (UTF-8, forma C),
   <code class="literal">&quot;\x61\xCC\x81&quot;</code> (UTF-8, forma D) o cualquier otra representación
   posible? La respuesta es que el string será codificado de la manera en que está
   codificado en el archivo de script. Por lo tanto, si el script está escrito en ISO-8859-1, el
   string será codificado en ISO-8859-1 y viceversa. Sin embargo, esto no se aplica
   si Zend Multibyte está activado; en este caso, el script puede estar escrito en una
   codificación arbitraria (que es explícitamente declarada o detectada) y luego convertido
   a una cierta codificación interna, que luego será la codificación utilizada para los
   literales de string.
   Tenga en cuenta que hay ciertas restricciones sobre la codificación del script (o sobre la codificación
   interna, si Zend Multibyte está activado) - esto significa casi siempre que esta
   codificación debe ser un superconjunto compatible con ASCII, como UTF-8 o ISO-8859-1.
   Tenga en cuenta, sin embargo, que las codificaciones dependientes del estado donde las mismas
   valores de octeto pueden ser utilizados en estados de desplazamiento iniciales y no iniciales
   pueden causar problemas.
  </p>
  <p class="para">
   Por supuesto, para ser útiles, las funciones que operan sobre texto pueden necesitar
   hacer ciertas suposiciones sobre cómo el string está codificado. Desafortunadamente,
   hay muchas variaciones en este sentido en las funciones de PHP:
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Algunas funciones asumen que el string está codificado en un (todo) conjunto de codificación de un octeto, pero no necesitan interpretar estos octetos como caracteres específicos. Este es el caso, por ejemplo, de <span class="function"><a href="function.substr.php" class="function">substr()</a></span>,
     <span class="function"><a href="function.strpos.php" class="function">strpos()</a></span>, <span class="function"><a href="function.strlen.php" class="function">strlen()</a></span> o
     <span class="function"><a href="function.strcmp.php" class="function">strcmp()</a></span>. Otra forma de pensar en estas funciones es que operan sobre búferes de memoria, es decir, que trabajan con octetos y desplazamientos de octetos.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Otras funciones reciben la codificación del string, asumiendo posiblemente un valor predeterminado si no se proporciona información de este tipo. Este es el caso de
     <span class="function"><a href="function.htmlentities.php" class="function">htmlentities()</a></span> y la mayoría de las funciones en
     la <a href="book.mbstring.php" class="link">extensión mbstring</a>.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Otras utilizan la localización actual (ver <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span>),
     pero funcionan octeto por octeto.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Finalmente, pueden simplemente asumir que el string utiliza una codificación
     específica, generalmente UTF-8. Este es el caso de la mayoría de las funciones en
     la <a href="book.intl.php" class="link">extensión intl</a> y en
     la <a href="book.pcre.php" class="link">extensión PCRE</a>
     (en este último caso, solo cuando se utiliza el modificador <code class="literal">u</code>).
    </span>
   </li>
  </ul>

  <p class="para">
   En última instancia, esto significa que escribir programas correctos que utilicen
   Unicode depende de evitar cuidadosamente las funciones que no funcionarán y
   que probablemente corromperán los datos, y de utilizar en su lugar las
   funciones que se comportan correctamente, generalmente provenientes de las extensiones
   <a href="book.intl.php" class="link">intl</a> y <a href="book.mbstring.php" class="link">mbstring</a>.
   Sin embargo, utilizar funciones capaces de manejar codificaciones Unicode es solo el comienzo. Independientemente de las funciones que el lenguaje proporciona, es esencial conocer la especificación Unicode. Por ejemplo, un programa que asume que solo hay mayúsculas y minúsculas hace una suposición errónea.
  </p>
 </div>
</div><?php manual_footer($setup); ?>