<?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"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</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">){}
</span><span style="color: #0000BB">test</span><span style="color: #007700">();</span></code></pre></div>
   </div>

   <p class="simpara">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"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">(function () {
    </span><span style="color: #0000BB">$func </span><span style="color: #007700">= </span><span style="color: #DD0000">'func_num_args'</span><span style="color: #007700">;
    </span><span style="color: #0000BB">$func</span><span style="color: #007700">();
})();</span></code></pre></div>
   </div>

   <p class="simpara">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">Nombres de clases, interfaces y traits no válidos</h3>

  <p class="para">
   Los siguientes nombres no se pueden utilizar 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 strings numéricos ahora respetan la notación científica</h3>

  <p class="para">
   Las operaciones enteras y las conversiones sobre strings numéricos 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-rand.php" class="function">mt_rand()</a></span>
   se ha invocado, entonces <strong><code><a href="random.constants.php#constant.mt-rand-php">MT_RAND_PHP</a></code></strong>
   se puede utilizar 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 (e 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 se ha
   modificado: <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 se puede
   utilizar en los identificadores que no están entre comillas.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.error_log-syslog">
  <h3 class="title">
    Cambios de <code class="parameter">error_log</code> con 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; se emitirá, 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 se admite para los strings
  </h3>

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

 <div class="sect2" id="migration71.incompatible.empty-string-modifcation-by-character">
  <h3 class="title">Asignación mediante acceso por índice de string en un string vacío</h3>
  <p class="para">
   La modificación de un string carácter por carácter en un string vacío ahora funciona de la misma manera que para los strings no vacíos;
   es decir, escribiendo en un índice fuera de rango del string con espacios,
   donde los tipos que no sean integer se convierten a integer, y solo se utiliza el primer carácter del string asignado.
   Anteriormente, los strings vacíos se trataban silenciosamente
   como un array vacío.
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$a </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">;
</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">;
</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
    </div>

    <p class="simpara">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="simpara">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 se han eliminado:
  </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 orden de los elementos en 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
   se crearon automáticamente al referenciarlos en una asignación por
   referencia. Por ejemplo:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$array </span><span style="color: #007700">= [];
</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">];
</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">;
</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

   <p class="simpara">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="simpara">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 ordenación interno se ha mejorado, lo que puede dar lugar a
   un orden de ordenació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 se ha 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"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</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">();
</span><span style="color: #0000BB">?&gt;</span></code></pre></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"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">) {};
</span><span style="color: #0000BB">$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$this</span><span style="color: #007700">) {};
</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></code></pre></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"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
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></code></pre></div>
   </div>

   <p class="simpara">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">Deprecación de flujos sslv2</h3>
  <p class="para">
   El flujo SSLv2 se ha deprecado 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 se
   alcanzaría.
  </p>
 </div>

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