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

contributors($setup);

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

 <div class="sect2" id="migration71.incompatible.too-few-arguments-exception">
  <h3 class="title">Excepción al pasar muy pocos argumentos de función</h3>

  <p class="para">
   Anteriormente, se emitía una advertencia al invocar funciones definidas por el usuario con muy pocos argumentos. Ahora, esta advertencia se ha promovido a una excepción de error. Esta modificación se aplica únicamente a las funciones definidas por el usuario, y no a las funciones internas. Por ejemplo:
  </p>

  <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">test</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">){}<br /></span><span style="color: #0000BB">test</span><span style="color: #007700">();</span></span></code></div>
   </div>

   <p class="para">Resultado del ejemplo anterior es similar a:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), 0 passed in %s on line %d and exactly 1 expected in %s:%d
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.forbid-dynamic-calls-to-scope-introspection-functions">
  <h3 class="title">Prohibir las llamadas dinámicas a las funciones de introspección de ámbito</h3>

  <p class="para">
   Se han prohibido las llamadas dinámicas para ciertas funciones (en forma de <code class="literal">$func()</code> o <code class="literal">array_map(&#039;extract&#039;, ...)</code>, etc.). Estas funciones inspeccionan o modifican otro ámbito, y presentan un comportamiento ambiguo y no fiable. Las funciones son las siguientes:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.assert.php" class="function">assert()</a></span> - con una cadena como primer argumento
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.compact.php" class="function">compact()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.extract.php" class="function">extract()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-get-args.php" class="function">func_get_args()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-get-arg.php" class="function">func_get_arg()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-num-args.php" class="function">func_num_args()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.get-defined-vars.php" class="function">get_defined_vars()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.mb-parse-str.php" class="function">mb_parse_str()</a></span> - con un argumento
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.parse-str.php" class="function">parse_str()</a></span> - con un argumento
    </span>
   </li>
  </ul>

  <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 () {<br />    </span><span style="color: #0000BB">$func </span><span style="color: #007700">= </span><span style="color: #DD0000">'func_num_args'</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$func</span><span style="color: #007700">();<br />})();</span></span></code></div>
   </div>

   <p class="para">El ejemplo anterior mostrará:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Warning: Cannot call func_num_args() dynamically in %s on line %d
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.invalid-class-names">
  <h3 class="title">Nombre de clase, interfaz y trait inválido</h3>

  <p class="para">
   Los siguientes nombres no pueden ser utilizados para nombrar clases, interfaces o traits:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara"><span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span></span>
   </li>
   <li class="listitem">
    <span class="simpara"><span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span></span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration71.incompatible.numerical-strings-scientific-notation">
  <h3 class="title">Las conversiones de cadenas numéricas ahora respetan la notación científica</h3>

  <p class="para">
   Las operaciones enteras y las conversiones sobre cadenas numéricas ahora respetan la notación científica. Esto incluye también la operación de cast <code class="literal">(int)</code> y las siguientes funciones: <span class="function"><a href="function.intval.php" class="function">intval()</a></span> (donde la base es 10), <span class="function"><a href="function.settype.php" class="function">settype()</a></span>, <span class="function"><a href="function.decbin.php" class="function">decbin()</a></span>, <span class="function"><a href="function.decoct.php" class="function">decoct()</a></span> y <span class="function"><a href="function.dechex.php" class="function">dechex()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.fixes-to-mt_rand-algorithm">
  <h3 class="title">Correcciones al algoritmo <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span></h3>

  <p class="para">
   <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> ahora utiliza por defecto la versión corregida del algoritmo Mersenne Twister. Si la salida determinista de <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span> ha sido invocada, entonces <strong><code><a href="random.constants.php#constant.mt-rand-php">MT_RAND_PHP</a></code></strong> puede ser utilizado como segundo parámetro opcional de <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span> para preservar la antigua (y incorrecta) implementación.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.rand-srand-aliases">
  <h3 class="title">
   <span class="function"><a href="function.rand.php" class="function">rand()</a></span> alias de <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> y <span class="function"><a href="function.srand.php" class="function">srand()</a></span> alias de <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span>
  </h3>

  <p class="para">
   <span class="function"><a href="function.rand.php" class="function">rand()</a></span> y <span class="function"><a href="function.srand.php" class="function">srand()</a></span> son ahora alias de <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> y <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span>, respectivamente. Esto significa que la salida para las siguientes funciones ha sido modificada: <span class="function"><a href="function.rand.php" class="function">rand()</a></span>, <span class="function"><a href="function.shuffle.php" class="function">shuffle()</a></span>, <span class="function"><a href="function.str-shuffle.php" class="function">str_shuffle()</a></span> y <span class="function"><a href="function.array-rand.php" class="function">array_rand()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.delete-control-character-in-identifiers">
  <h3 class="title">Prohibir el carácter de control de eliminación ASCII en los identificadores</h3>

  <p class="para">
   El carácter de control de eliminación ASCII (<code class="literal">0X7f</code>) no puede ser utilizado en los identificadores que no están entre comillas.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.error_log-syslog">
  <h3 class="title">
   <code class="parameter">error_log</code> cambio para el valor <code class="literal">syslog</code>
  </h3>

  <p class="para">
   Si el parámetro INI <code class="parameter">error_log</code> está definido en <code class="literal">syslog</code>, los niveles de error PHP se mapean a los niveles de error syslog. Esto aporta una diferenciación más fina en los registros de errores en comparación con el enfoque anterior donde todos los errores se registraban con el nivel de aviso únicamente.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.dont-call-destructors">
  <h3 class="title">No llamar a los destructores en objetos incompletos</h3>

  <p class="para">
   Los destructores ya no se llaman para los objetos que lanzan una excepción durante la ejecución de su constructor. En versiones anteriores, este comportamiento dependía de si el objeto era referenciado fuera del constructor (por ejemplo, por una traza de excepción).
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.call_user_func-with-ref-args">
  <h3 class="title">
   <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> manejo de argumentos de referencia
  </h3>

  <p class="para">
   <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> ahora siempre generará una advertencia en las llamadas a funciones que esperan referencias como argumentos. Anteriormente, esto dependía de si la llamada estaba completamente calificada.
  </p>
  <p class="para">
   Además, <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> y <span class="function"><a href="function.call-user-func-array.php" class="function">call_user_func_array()</a></span> ya no abandonarán la llamada de función en este caso. La advertencia &quot;referencia esperada&quot; será emitida, pero la llamada continuará como de costumbre.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.empty-string-index-operator">
  <h3 class="title">
   El operador de índice vacío ya no es soportado para las cadenas
  </h3>

  <p class="para">
   La aplicación del operador de índice vacío a una cadena (por ejemplo, <code class="literal">$str[] = $x</code>) lanza un error fatal en lugar de convertirla silenciosamente en un array.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.empty-string-modifcation-by-character">
  <h3 class="title">Asignación vía acceso de índice de cadena en una cadena vacía</h3>
  <p class="para">
   La modificación de cadena por carácter en una cadena vacía ahora funciona como para las cadenas no vacías, es decir, escribiendo en un desplazamiento fuera de rango de la cadena con espacios, donde los tipos no enteros se convierten en enteros, y solo el primer carácter de la cadena asignada se utiliza. Anteriormente, las cadenas vacías se trataban silenciosamente como un array vacío.
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #0000BB">10</span><span style="color: #007700">] = </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</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 7.0:</p>
    <div class="example-contents screen">
<div class="cdata"><pre>
array(1) {
  [10]=&gt;
  string(3) &quot;foo&quot;
}
</pre></div>
    </div>
    <p class="para">Resultado del ejemplo anterior en PHP 7.1:</p>
    <div class="example-contents screen">
<div class="cdata"><pre>
string(11) &quot;          f&quot;
</pre></div>
    </div>
   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.removed-ini-directives">
  <h3 class="title">Directivas ini eliminadas</h3>

  <p class="para">
   Las siguientes directivas ini han sido eliminadas:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.entropy_file</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.entropy_length</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.hash_function</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.hash_bits_per_character</code>
    </span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration71.incompatible.array-order">
  <h3 class="title">
   El ordenamiento de los elementos de un array ha cambiado cuando se crean automáticamente durante las asignaciones por referencia
  </h3>

  <p class="para">
   El orden de los elementos en un array ha cambiado cuando estos elementos han sido creados automáticamente al referenciarlos en una asignación por referencia. Por ejemplo:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= [];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"a"</span><span style="color: #007700">] =&amp; </span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"b"</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"b"</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">$array</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 7.0:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [&quot;a&quot;]=&gt;
  &amp;int(1)
  [&quot;b&quot;]=&gt;
  &amp;int(1)
}
</pre></div>
   </div>
   <p class="para">Resultado del ejemplo anterior en PHP 7.1:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [&quot;b&quot;]=&gt;
  &amp;int(1)
  [&quot;a&quot;]=&gt;
  &amp;int(1)
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.sort-order">
  <h3 class="title">Orden de clasificación de elementos iguales</h3>
  <p class="para">
   El algoritmo de clasificación interno ha sido mejorado, lo que puede resultar en un orden de clasificación diferente de los elementos que se comparaban como iguales anteriormente.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    No se debe confiar en el orden de los elementos que se comparan como iguales; podría cambiar en cualquier momento.
   </p>
  </p></blockquote>
 </div>

 <div class="sect2" id="migration71.incompatible.e-recoverable">
  <h3 class="title">Mensaje de error para los errores E_RECOVERABLE</h3>
  <p class="para">
   El mensaje de error para los errores E_RECOVERABLE ha sido cambiado de &quot;Catchable fatal error&quot; a &quot;Recoverable fatal error&quot;.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.unserialize">
  <h3 class="title">Parámetro $options de unserialize()</h3>
  <p class="para">
   El elemento <code class="literal">allowed_classes</code> del parámetro $options de <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> ahora es estrictamente tipado, es decir, si se da un valor distinto de un <span class="type"><a href="language.types.array.php" class="type array">array</a></span> o un <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>, unserialize() devuelve false y emite un <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.datetime-microseconds">
  <h3 class="title">El constructor de DateTime incorpora microsegundos</h3>
  <p class="para">
   <span class="classname"><a href="class.datetime.php" class="classname">DateTime</a></span> y <span class="classname"><a href="class.datetimeimmutable.php" class="classname">DateTimeImmutable</a></span> ahora incorporan correctamente los microsegundos cuando se construyen a partir de la hora actual, ya sea explícitamente o con una cadena relativa (por ejemplo, <code class="literal">&quot;first day of next month&quot;</code>). Esto significa que las comparaciones ingenuas de dos instancias recién creadas ahora serán más propensas a devolver false en lugar de true:
   <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">new </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">() == new </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

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

 <div class="sect2" id="migration71.incompatible.fatal-errors-to-error-exceptions">
  <h3 class="title">Conversiones de errores fatales en excepciones <span class="classname"><a href="class.error.php" class="classname">Error</a></span></h3>
  <p class="para">
   En la extensión date, los datos de serialización inválidos para las clases <span class="classname"><a href="class.datetime.php" class="classname">DateTime</a></span> o <span class="classname"><a href="class.dateperiod.php" class="classname">DatePeriod</a></span>, o el fallo de la inicialización de la zona horaria a partir de datos serializados, ahora lanzarán una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> a partir del método <span class="methodname"><strong>__wakeup()</strong></span> o <span class="methodname"><strong>__set_state()</strong></span>, en lugar de traducirse en un error fatal.
  </p>

  <p class="para">
   En la extensión DBA, las funciones de modificación de datos (como <span class="function"><a href="function.dba-insert.php" class="function">dba_insert()</a></span>) ahora lanzarán una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de desencadenar un error fatal capturable si la clave no contiene exactamente dos elementos.
  </p>

  <p class="para">
   En la extensión DOM, los contextos de validación de esquema o RelaxNG no válidos ahora lanzarán una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de resultar en un error fatal. Asimismo, el intento de registrar una clase de nodo que no extiende la clase base apropiada, o intenta leer una propiedad no válida o escribir en una propiedad de solo lectura, también lanzará una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   En la extensión IMAP, las direcciones de correo electrónico más largas que 16385 bytes lanzarán una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de traducirse en un error fatal.
  </p>

  <p class="para">
   En la extensión Intl, no llamar al constructor padre en una clase que extiende <span class="classname"><a href="class.collator.php" class="classname">Collator</a></span> antes de llamar a los métodos padres ahora lanzará una <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de resultar en un error fatal recuperable. Además, la clonación de un objeto <span class="classname"><a href="class.transliterator.php" class="classname">Transliterator</a></span> ahora lanza una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en caso de fallo de la clonación del Transliterator interno en lugar de un error fatal.
  </p>

  <p class="para">
   En la extensión LDAP, proporcionar un tipo de modificación desconocido a <span class="function"><strong>ldap_batch_modify()</strong></span> ahora lanzará una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de un error fatal.
  </p>

  <p class="para">
   En la extensión mbstring, las funciones <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> y <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span> ahora lanzarán una excepción <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> si se proporciona una expresión PHP no válida y se utiliza la opción &#039;e&#039;.
  </p>

  <p class="para">
   En la extensión mcrypt, <span class="function"><a href="function.mcrypt-encrypt.php" class="function">mcrypt_encrypt()</a></span> y <span class="function"><a href="function.mcrypt-decrypt.php" class="function">mcrypt_decrypt()</a></span> ahora lanzarán una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de un error fatal si mcrypt no puede ser inicializada.
  </p>

  <p class="para">
   En la extensión mysqli, el intento de leer una propiedad no válida o de escribir en una propiedad de solo lectura ahora lanza una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de traducirse en un error fatal.
  </p>

  <p class="para">
   En la extensión Reflection, no recuperar un objeto de reflexión o recuperar una propiedad de objeto ahora lanza una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de traducirse en un error fatal.
  </p>

  <p class="para">
   En la extensión de sesión, los gestores de sesión personalizados que no devuelvan cadenas para los ID de sesión ahora lanzarán una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de provocar un error fatal cuando se llama a una función para generar un ID de sesión.
  </p>

  <p class="para">
   En la extensión SimpleXML, la creación de un atributo sin nombre o duplicado ahora lanzará una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de generar un error fatal.
  </p>

  <p class="para">
   En la extensión SPL, un intento de clonar un objeto <span class="classname"><strong class="classname">SplDirectory</strong></span> ahora lanzará una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de generar un error fatal. Asimismo, llamar a <span class="methodname"><a href="arrayiterator.append.php" class="methodname">ArrayIterator::append()</a></span> durante la iteración sobre un objeto también lanzará una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   En la extensión estándar, la función <span class="function"><a href="function.assert.php" class="function">assert()</a></span>, cuando se proporciona con un argumento de cadena como primer parámetro, ahora lanzará una excepción <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> en lugar de un error fatal capturable si el código PHP no es válido. Asimismo, la llamada a <span class="function"><a href="function.forward-static-call.php" class="function">forward_static_call()</a></span> fuera de un ámbito de clase ahora lanza una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   En la extensión Tidy, la creación manual de un <span class="classname"><a href="class.tidynode.php" class="classname">tidyNode</a></span> lanzará una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de un error fatal.
  </p>

  <p class="para">
   En la extensión WDDX, una referencia circular durante la serialización ahora lanzará una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de un error fatal.
  </p>

  <p class="para">
   En la extensión XML-RPC, una referencia circular durante la serialización ahora lanzará una instancia de excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de traducirse en un error fatal.
  </p>

  <p class="para">
   En la extensión Zip, el método <span class="methodname"><a href="ziparchive.addglob.php" class="methodname">ZipArchive::addGlob()</a></span> ahora lanzará una excepción <span class="classname"><a href="class.error.php" class="classname">Error</a></span> en lugar de traducirse en un error fatal si el soporte de glob no está disponible.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.lexical-names">
  <h3 class="title">Las variables ligadas léxicamente no pueden reutilizar los nombres</h3>

  <p class="para">
   Las variables ligadas a una <a href="functions.anonymous.php" class="link">función anónima</a> vía la construcción <code class="literal">use</code> no pueden utilizar el mismo nombre que cualquier <a href="language.variables.predefined.php" class="link">superglobals</a>, <var class="varname">$this</var> o cualquier parámetro. Por ejemplo, todas estas definiciones de función resultarán en un error fatal:

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">) {};<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$this</span><span style="color: #007700">) {};<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= function (</span><span style="color: #0000BB">$param</span><span style="color: #007700">) use (</span><span style="color: #0000BB">$param</span><span style="color: #007700">) {};</span></span></code></div>
    </div>

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

 <div class="sect2" id="migration71.incompatible.long2ip">
  <h3 class="title">Cambio de tipo de parámetro de long2ip()</h3>
  <p class="para">
   <span class="function"><a href="function.long2ip.php" class="function">long2ip()</a></span> ahora espera un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> en lugar de <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.json">
  <h3 class="title">Codificación y decodificación JSON</h3>
  <p class="para">
   El parámetro INI <code class="parameter">serialize_precision</code> ahora controla la precisión de serialización al codificar los <span class="type"><a href="language.types.float.php" class="type float">float</a></span>s.
  </p>
  <p class="para">
   La decodificación de una clave vacía ahora resulta en un nombre de propiedad vacío, en lugar de <code class="literal">_empty_</code> como nombre de propiedad.

   <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">json_decode</span><span style="color: #007700">(</span><span style="color: #0000BB">json_encode</span><span style="color: #007700">([</span><span style="color: #DD0000">'' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">])));</span></span></code></div>
   </div>

   <p class="para">Resultado del ejemplo anterior es similar a:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
object(stdClass)#1 (1) {
  [&quot;&quot;]=&gt;
  int(1)
}
</pre></div>
   </div>
  </div>
  </p>
  <p class="para">
   Cuando se proporciona el indicador <strong><code><a href="json.constants.php#constant.json-unescaped-unicode">JSON_UNESCAPED_UNICODE</a></code></strong> a <span class="function"><a href="function.json-encode.php" class="function">json_encode()</a></span>, las secuencias U+2028 y U+2029 ahora se escapan.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.mbstring">
  <h3 class="title">
   Modificaciones de la semántica de los parámetros de <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> y <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span>
  </h3>
  <p class="para">
   El tercer parámetro de las funciones <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> y <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span> (<code class="parameter">regs</code>) ahora se establece en un array vacío si no se ha hecho ninguna coincidencia. Anteriormente, el parámetro no habría sido modificado.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.openssl">
  <h3 class="title">Abandono de los flujos sslv2</h3>
  <p class="para">
   El flujo SSLv2 ha sido abandonado en OpenSSL.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.typed-returns-compile-time">
  <h3 class="title">Prohibido &quot;return;&quot; para los retornos tipados en tiempo de compilación</h3>
  <p class="para">
   Una declaración de retorno sin argumentos en las funciones que declaran un tipo de retorno ahora emite <strong><code><a href="errorfunc.constants.php#constant.e-compile-error">E_COMPILE_ERROR</a></code></strong> (excepto si el tipo de retorno se declara como <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span>), incluso si la declaración de retorno nunca sería alcanzada.
  </p>
 </div>

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