<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration73.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'migration73.incompatible.php',
    1 => 'Cambios incompatibles con versiones anteriores',
    2 => 'Cambios incompatibles con versiones anteriores',
  ),
  'up' => 
  array (
    0 => 'migration73.php',
    1 => 'Migraci&oacute;n de PHP 7.2.x a PHP 7.3.x',
  ),
  'prev' => 
  array (
    0 => 'migration73.constants.php',
    1 => 'Nuevas constantes globales',
  ),
  'next' => 
  array (
    0 => 'migration73.deprecated.php',
    1 => 'Funcionalidades obsoletas',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'appendices/migration73/incompatible.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration73.incompatible" class="sect1">
 <h2 class="title">Cambios incompatibles con versiones anteriores</h2>

 <div class="sect2" id="migration73.incompatible.core">
  <h3 class="title">Núcleo de PHP</h3>

  <div class="sect3" id="migration73.incompatible.core.heredoc-nowdoc">
   <h4 class="title">Interpretación de las Etiquetas de Terminación Heredoc/Nowdoc</h4>

   <p class="para">
    Con la introducción de <a href="migration73.new-features.php#migration73.new-features.core.heredoc" class="link">la sintaxis flexible heredoc
    / nowdoc</a>, los <span class="type"><a href="language.types.string.php" class="type string">string</a></span> doc que contienen la etiqueta de terminación
    en su cuerpo pueden causar errores de sintaxis o cambiar en interpretación. Por ejemplo en :
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$str </span><span style="color: #007700">= &lt;&lt;&lt;FOO<br /></span><span style="color: #DD0000">abcdefg<br /></span><span style="color: #007700">   FOO<br /></span><span style="color: #0000BB">FOO</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    la ocurrencia indentada de <code class="literal">FOO</code> no tenía significado
    particular anteriormente. Ahora será interpretada como el final de
    la <span class="type"><a href="language.types.string.php" class="type string">string</a></span> heredoc y el <code class="literal">FOO;</code> siguiente causará un error
    de sintaxis. Este problema puede siempre ser resuelto eligiendo una etiqueta de
    terminación que no aparezca en el contenido de la <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration73.incompatible.core.continue-targeting-switch">
   <h4 class="title">Continue apuntando a Switch genera Advertencias</h4>

   <p class="para">
    Las declaraciones <code class="literal">continue</code> apuntando a las estructuras de flujo de
    control <code class="literal">switch</code> generarán ahora una advertencia.
    En PHP estas declaraciones <code class="literal">continue</code> son equivalentes a
    <code class="literal">break</code>, mientras que se comportan como
    <code class="literal">continue 2</code> en otros lenguajes.
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">while (</span><span style="color: #0000BB">$foo</span><span style="color: #007700">) {<br />    switch (</span><span style="color: #0000BB">$bar</span><span style="color: #007700">) {<br />      case </span><span style="color: #DD0000">"baz"</span><span style="color: #007700">:<br />         continue;<br />         </span><span style="color: #FF8000">// Advertencia: "continue" apuntando a switch es equivalente a<br />         //          "break". ¿Quiso decir "continue 2"?<br />   </span><span style="color: #007700">}<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

  <div class="sect3" id="migration73.incompatible.core.arrayaccess">
   <h4 class="title">Interpretación Estricta de las Claves de Cadenas de Caracteres Enteros en ArrayAccess</h4>

   <p class="para">
    Los accesos de <span class="type"><a href="language.types.array.php" class="type array">array</a></span> del tipo <code class="literal">$obj[&quot;123&quot;]</code>, donde
    <code class="literal">$obj</code> implementa <span class="classname"><a href="class.arrayaccess.php" class="classname">ArrayAccess</a></span> y
    <code class="literal">&quot;123&quot;</code> es una <span class="type"><a href="language.types.string.php" class="type string">string</a></span> de <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> literal ya no
    resultarán en una conversión implícita a <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>, es decir,
    <code class="literal">$obj-&gt;offsetGet(&quot;123&quot;)</code> será llamado en lugar de
    <code class="literal">$obj-&gt;offsetGet(123)</code>. Esto corresponde al comportamiento
    para los no literales. El comportamiento de los <span class="type"><a href="language.types.array.php" class="type array">array</a></span> no se ve afectado
    de ninguna manera, continúan convirtiendo implícitamente
    claves de <span class="type"><a href="language.types.string.php" class="type string">string</a></span> a <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration73.incompatible.core.static-properties">
   <h4 class="title">Las Propiedades Estáticas ya no se Separan por la Asignación de Referencia</h4>

   <p class="para">
    En PHP, las propiedades estáticas se comparten entre las clases heredadas,
    a menos que la propiedad estática sea explícitamente reemplazada en una clase hija.
    Sin embargo, debido a un artefacto de implementación, era posible separar
    las propiedades estáticas asignando una referencia.
    Esta laguna ha sido corregida.
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Test </span><span style="color: #007700">{<br />    public static </span><span style="color: #0000BB">$x </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />}<br />class </span><span style="color: #0000BB">Test2 </span><span style="color: #007700">extends </span><span style="color: #0000BB">Test </span><span style="color: #007700">{ }<br /><br /></span><span style="color: #0000BB">Test2</span><span style="color: #007700">::</span><span style="color: #0000BB">$x </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$x</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$x </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">Test</span><span style="color: #007700">::</span><span style="color: #0000BB">$x</span><span style="color: #007700">, </span><span style="color: #0000BB">Test2</span><span style="color: #007700">::</span><span style="color: #0000BB">$x</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Anteriormente: int(0), int(1)<br />// Ahora:        int(1), int(1)<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

  <div class="sect3" id="migration73.incompatible.core.reference-unwrapping">
   <h4 class="title">
    Las referencias devueltas por los arrays y los accesos a las propiedades
    son inmediatamente descomprimidas
   </h4>

   <p class="para">
    Las referencias devueltas por los arrays y los accesos a las propiedades
    son ahora descomprimidas en el contexto del acceso. Esto significa que ya no es
    posible modificar la referencia entre el acceso y el uso del valor accedido:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$arr </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$ref </span><span style="color: #007700">=&amp; </span><span style="color: #0000BB">$arr</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">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">] + (</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">] = </span><span style="color: #0000BB">2</span><span style="color: #007700">));<br /></span><span style="color: #FF8000">// Anteriormente: int(4), Ahora: int(3)<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Esto hace que el comportamiento de las referencias y no referencias sea coherente.
    Es de notar que leer y escribir un valor dentro de una única
    expresión continúa siendo un comportamiento no definido y puede cambiar
    nuevamente en el futuro.
   </p>
  </div>

  <div class="sect3" id="migration73.incompatible.core.traversable-unpacking">
   <h4 class="title">La descompresión de argumentos de Traversables con claves no enteras ya no es soportada</h4>

   <p class="para">
    La descompresión de argumentos ha dejado de funcionar con
    <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span>s con claves no enteras
    El siguiente código funcionaba en PHP 5.6-7.2 por accidente.
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(...</span><span style="color: #0000BB">$args</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$args</span><span style="color: #007700">);<br />}<br />function </span><span style="color: #0000BB">gen</span><span style="color: #007700">() {<br />    yield </span><span style="color: #0000BB">1.23 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">123</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(...</span><span style="color: #0000BB">gen</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

  <div class="sect3" id="migration73.incompatible.core.misc">
   <h4 class="title">Diversos</h4>

   <p class="para">
    La utilidad <var class="filename">ext_skel</var> ha sido completamente repensada con
    nuevas opciones y algunas opciones antiguas eliminadas.
    Esto ahora está escrito en PHP y no tiene ninguna dependencia externa.
   </p>

   <p class="para">
    El soporte para BeOS ha sido abandonado.
   </p>

   <p class="para">
    Las excepciones lanzadas debido a una conversión automática de advertencias
    en excepciones con el modo <code class="literal">EH_THROW</code> (por ejemplo, algunas
    excepciones de <span class="classname"><a href="class.datetime.php" class="classname">DateTime</a></span>) ya no llenan el estado de
    <span class="function"><a href="function.error-get-last.php" class="function">error_get_last()</a></span>. Como tales, ahora funcionan
    de la misma manera que las excepciones lanzadas manualmente.
   </p>

   <p class="para">
    <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> ahora reporta los tipos incorrectos
    como <code class="literal">int</code> y <code class="literal">bool</code> en lugar de
    <code class="literal">integer</code> y <code class="literal">boolean</code>, respectivamente.
   </p>

   <p class="para">
    Las variables indefinidas pasadas a <span class="function"><a href="function.compact.php" class="function">compact()</a></span> serán
    ahora reportadas con una notificación.
   </p>

   <p class="para">
    <span class="function"><a href="function.getimagesize.php" class="function">getimagesize()</a></span> y las funciones conexas ahora reportan
    el tipo MIME de las imágenes BMP como
    <code class="literal">image/bmp</code> en lugar de <code class="literal">image/x-ms-bmp</code>,
    ya que el primero ha sido registrado con la IANA (ver
    <a href="https://datatracker.ietf.org/doc/html/rfc7903" class="link external">&raquo;&nbsp;RFC 7903</a>).
   </p>

   <p class="para">
    <span class="function"><a href="function.stream-socket-get-name.php" class="function">stream_socket_get_name()</a></span> ahora devuelve las direcciones
    IPv6 con corchetes. Por ejemplo, <code class="literal">&quot;[::1]:1337&quot;</code> será
    devuelto en lugar de <code class="literal">&quot;::1:1337&quot;</code>.
   </p>
  </div>
 </div>

 <div class="sect2" id="migration73.incompatible.bc">
  <h3 class="title">BCMath Arbitrary Precision Mathematics</h3>

  <p class="para">
   Todas las advertencias lanzadas por las <a href="ref.bc.php" class="link">funciones BCMath</a>
   ahora utilizan el gestor de errores de PHP. Anteriormente, algunas
   advertencias se escribían directamente a stderr.
  </p>

  <p class="para">
   <span class="function"><a href="function.bcmul.php" class="function">bcmul()</a></span> y <span class="function"><a href="function.bcpow.php" class="function">bcpow()</a></span> ahora devuelven
   los números con la precisión solicitada. Anteriormente, algunos números podían
   omitir los ceros decimales finales.
  </p>
 </div>

 <div class="sect2" id="migration73.incompatible.imap">
  <h3 class="title">IMAP, POP3 y NNTP</h3>

  <p class="para">
   Las autenticaciones <strong class="command">rsh</strong>/<strong class="command">ssh</strong> están
   deshabilitadas por defecto. Utilice <a href="imap.configuration.php#ini.imap.enable-insecure-rsh" class="link">imap.enable_insecure_rsh</a> si
   desea activarlas. Es de notar que la biblioteca IMAP no filtra los nombres de las carpetas antes de pasarlos a los comandos
   <strong class="command">rsh</strong>/<strong class="command">ssh</strong>, por lo que pasar datos no fiables a esta función con <strong class="command">rsh</strong>/<strong class="command">ssh</strong> activado es peligroso.
  </p>
 </div>

 <div class="sect2" id="migration73.incompatible.mbstring">
  <h3 class="title">Cadenas de caracteres multioctetos</h3>

  <p class="para">
   Debido al soporte de capturas nombradas, las máscaras
   <code class="literal">mb_ereg_*()</code> que utilizan capturas nombradas se comportarán
   de manera diferente. En particular, las capturas nombradas formarán parte de las
   coincidencias y <span class="function"><a href="function.mb-ereg-replace.php" class="function">mb_ereg_replace()</a></span> interpretará la
   sintaxis adicional. Ver <a href="migration73.new-features.php#migration73.new-features.mbstring.named-captures" class="link">Capturas
    Nombradas</a> para más información.
  </p>
 </div>

 <div class="sect2" id="migration73.incompatible.mysqli">
  <h3 class="title">Extensión MySQL Mejorada (MySQLi)</h3>

  <p class="para">
   Las declaraciones preparadas ahora reportan las fracciones de segundo
   para las columnas <code class="literal">DATETIME</code>, <code class="literal">TIME</code> y
   <code class="literal">TIMESTAMP</code> con especificador decimal (por ejemplo
   <code class="literal">TIMESTAMP(6)</code> al usar microsegundos).
   Anteriormente, las fracciones de segundo eran simplemente omitidas
   de los valores de retorno.
  </p>
 </div>

 <div class="sect2" id="migration73.incompatible.pdo-mysql">
  <h3 class="title">Funciones MySQL (PDO_MYSQL)</h3>

  <p class="para">
   Las declaraciones preparadas ahora reportan las fracciones de segundo
   para las columnas <code class="literal">DATETIME</code>, <code class="literal">TIME</code> y
   <code class="literal">TIMESTAMP</code> con especificador decimal (por ejemplo
   <code class="literal">TIMESTAMP(6)</code> al usar microsegundos).
   Anteriormente, las fracciones de segundo eran simplemente omitidas
   de los valores de retorno. Tenga en cuenta que esto solo afecta
   el uso de <a href="ref.pdo-mysql.php" class="link">PDO_MYSQL</a> con las
   declaraciones preparadas emuladas desactivadas (por ejemplo, utilizando la
   funcionalidad nativa de preparación). Las declaraciones que utilizan conexiones que tienen <strong><code><a href="pdo.constants.php#pdo.constants.attr-emulate-prepares">PDO::ATTR_EMULATE_PREPARES</a></code></strong>=<strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>
   (que es por defecto) no se ven afectadas por la corrección de error
   y ya recuperaban los valores de las fracciones de segundo del motor.
  </p>
 </div>

 <div class="sect2" id="migration73.incompatible.reflection">
  <h3 class="title">Reflection</h3>

  <p class="para">
   Las exportaciones de <a href="book.reflection.php" class="link">Reflection</a> en
   <span class="type"><a href="language.types.string.php" class="type string">string</a></span> ahora utilizan
   <code class="literal">int</code> y <code class="literal">bool</code> en lugar de
   <code class="literal">integer</code> y <code class="literal">boolean</code>, respectivamente.
  </p>
 </div>

 <div class="sect2" id="migration73.incompatible.spl">
  <h3 class="title">Biblioteca Estándar de PHP (SPL)</h3>

  <p class="para">
   Si un autocargador <a href="book.spl.php" class="link">SPL</a> lanza una excepción,
   los autocargadores siguientes no serán ejecutados. Anteriormente, todos los
   autocargadores eran ejecutados y las excepciones eran encadenadas.
  </p>
 </div>

 <div class="sect2" id="migration73.incompatible.simplexml">
  <h3 class="title">SimpleXML</h3>

  <p class="para">
   Las operaciones matemáticas que implican los objetos <a href="book.simplexml.php" class="link">SimpleXML</a> tratarán ahora el texto
   como un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> o un <span class="type"><a href="language.types.float.php" class="type float">float</a></span>, según lo que sea más apropiado.
   Anteriormente, los valores eran tratados como un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> sin condición.
  </p>
 </div>

 <div class="sect2" id="migration73.incompatible.cookie-decode">
  <h3 class="title">Cookies entrantes</h3>

  <p class="para">
   Desde PHP 7.3.23, los <em>nombres</em> de las cookies entrantes
   ya no se decodifican por URL por razones de seguridad.
  </p>
 </div>

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