<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration83.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'migration83.other-changes.php',
    1 => 'Otros cambios',
    2 => 'Otros cambios',
  ),
  'up' => 
  array (
    0 => 'migration83.php',
    1 => 'Migraci&oacute;n de PHP 8.2.x a PHP 8.3.x',
  ),
  'prev' => 
  array (
    0 => 'migration83.deprecated.php',
    1 => 'Funcionalidades obsoletas',
  ),
  'next' => 
  array (
    0 => 'migration83.windows-support.php',
    1 => 'Soporte para Windows',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'appendices/migration83/other-changes.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration83.other-changes" class="sect1">
 <h2 class="title">Otros cambios</h2>

 <div class="sect2" id="migration83.other-changes.core">
  <h3 class="title">Cambios en el núcleo</h3>

  <div class="sect3" id="migration83.other-changes.core.ffi">
   <h4 class="title">FFI</h4>

   <p class="para">
    <span class="methodname"><a href="ffi.load.php" class="methodname">FFI::load()</a></span> ahora está permitido durante la precarga
    cuando <a href="opcache.configuration.php#ini.opcache.preload-user" class="link">opcache.preload_user</a>
    es el usuario del sistema actual. Anteriormente,
    llamar a <span class="methodname"><a href="ffi.load.php" class="methodname">FFI::load()</a></span> no era posible
    durante la precarga si la directiva
    <a href="opcache.configuration.php#ini.opcache.preload-user" class="link">opcache.preload_user</a>
    estaba definida.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.core.fpm">
   <h4 class="title">FPM</h4>

   <p class="para">
    Las pruebas CLI de FPM ahora fallan si la ruta del socket es más larga de lo que el SO soporta.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.core.opcache">
   <h4 class="title">Opcache</h4>

   <p class="para">
    En las SAPI CLI y phpdbg, la precarga ya no requiere
    que la directiva <a href="opcache.configuration.php#ini.opcache.preload-user" class="link">opcache.preload_user</a>
    esté definida cuando PHP se ejecuta como root.
    En otras SAPI, esta directiva es requerida cuando PHP se ejecuta como root
    porque la precarga se realiza antes de que la SAPI cambie a un usuario no privilegiado.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.core.streams">
   <h4 class="title">Streams</h4>

   <p class="para">
    Bloquear <span class="function"><a href="function.fread.php" class="function">fread()</a></span> en una conexión de socket ahora devuelve
    inmediatamente si hay datos almacenados en búfer en lugar de esperar más datos.
   </p>

   <p class="para">
    Un stream de memoria ya no devuelve un error si el desplazamiento de búsqueda está más allá del final.
    En su lugar, la memoria se incrementará en la próxima escritura y los datos entre
    el final anterior y el desplazamiento se llenarán con ceros, similar a cómo funcionan los archivos.
   </p>

   <p class="para">
    Las operaciones de acceso <span class="function"><a href="function.stat.php" class="function">stat()</a></span> como
    <span class="function"><a href="function.file-exists.php" class="function">file_exists()</a></span> y similares ahora usarán la ruta real
    en lugar de la ruta del stream. Esto es coherente con la apertura
    del stream.
   </p>
  </div>
 </div>

 <div class="sect2" id="migration83.other-changes.sapi">
  <h3 class="title">Cambios en los módulos SAPI</h3>

  <div class="sect3" id="migration83.other-changes.sapi.cli">
   <h4 class="title">CLI</h4>

   <p class="para">
    Los streams <strong><code><a href="reserved.constants.php#constant.stdout">STDOUT</a></code></strong>, <strong><code><a href="reserved.constants.php#constant.stderr">STDERR</a></code></strong> y
    <strong><code><a href="reserved.constants.php#constant.stdin">STDIN</a></code></strong> ya no se cierran al destruir el recurso
    lo cual ocurre principalmente cuando el CLI termina.
    Sin embargo, aún es posible cerrar explícitamente estos streams usando
    <span class="function"><a href="function.fclose.php" class="function">fclose()</a></span> y similares.
   </p>
  </div>
 </div>

 <div class="sect2" id="migration83.other-changes.functions">
  <h3 class="title">Funciones cambiadas</h3>

  <div class="sect3" id="migration83.other-changes.functions.core">
   <h4 class="title">Core</h4>

   <p class="para">
    <span class="function"><a href="function.gc-status.php" class="function">gc_status()</a></span> ha añadido los siguientes 8 campos:

    <ul class="simplelist">
     <li><code class="literal">&quot;running&quot;</code> => bool</li>
     <li><code class="literal">&quot;protected&quot;</code> => bool</li>
     <li><code class="literal">&quot;full&quot;</code> => bool</li>
     <li><code class="literal">&quot;buffer_size&quot;</code> => int</li>
     <li><code class="literal">&quot;application_time&quot;</code> => float: El tiempo total de aplicación,
     en segundos (incluyendo el tiempo de recolección)</li>
     <li><code class="literal">&quot;collector_time&quot;</code> => float: El tiempo pasado recolectando
     ciclos, en segundos (incluyendo el tiempo de destructor y el tiempo de liberación)</li>
     <li><code class="literal">&quot;destructor_time&quot;</code> => float: El tiempo pasado ejecutando
     los destructores durante la recolección de ciclos, en segundos</li>
     <li><code class="literal">&quot;free_time&quot;</code> => float: El tiempo pasado liberando valores
     durante la recolección de ciclos, en segundos</li>
    </ul>
   </p>

   <p class="para">
    <span class="function"><a href="function.class-alias.php" class="function">class_alias()</a></span> ahora soporta la creación de un alias en
    clases internas.
   </p>

   <p class="para">
    Cambiar <a href="ini.core.php#ini.open-basedir" class="link">open_basedir</a> en tiempo de ejecución
    usando <code class="code">ini_set(&#039;open_basedir&#039;, ...);</code> ya no acepta rutas
    que contengan el directorio padre (<code class="literal">..</code>). Anteriormente,
    solo las rutas que comenzaban con <code class="literal">..</code> estaban prohibidas. Esto
    podía ser fácilmente eludido prefijando la ruta con <code class="literal">./</code>.
   </p>

   <p class="para">
    Los manejadores de excepciones de usuario ahora capturan excepciones durante el apagado.
   </p>

   <p class="para">
    El HTML resultante de <span class="function"><a href="function.highlight-string.php" class="function">highlight_string()</a></span> y
    <span class="function"><a href="function.highlight-file.php" class="function">highlight_file()</a></span> ha cambiado.
    Los espacios entre las etiquetas HTML externas son eliminados. Los saltos de línea y los espacios
    ya no se convierten en entidades HTML. Todo el HTML ahora está envuelto en una etiqueta
    <code class="literal">&lt;pre&gt;</code>. La etiqueta <code class="literal">&lt;span&gt;</code> externa se ha fusionado
    con la etiqueta <code class="literal">&lt;code&gt;</code>.
   </p>

  </div>

  <div class="sect3" id="migration83.other-changes.functions.calendar">
   <h4 class="title">Calendar</h4>

   <p class="para">
    <span class="function"><a href="function.easter-date.php" class="function">easter_date()</a></span> ahora soporta años desde 1970 a
    2,000,000,000 en sistemas de 64 bits, anteriormente solo soportaba
    años desde 1970 a 2037.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.functions.curl">
   <h4 class="title">Curl</h4>

   <p class="para">
    <span class="function"><a href="function.curl-getinfo.php" class="function">curl_getinfo()</a></span> ahora soporta dos nuevas constantes:
    <strong><code><a href="curl.constants.php#constant.curlinfo-capath">CURLINFO_CAPATH</a></code></strong> y
    <strong><code><a href="curl.constants.php#constant.curlinfo-cainfo">CURLINFO_CAINFO</a></code></strong>. Si la opción es <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, las siguientes claves
    estarán presentes:
    <code class="literal">&quot;capath&quot;</code> y <code class="literal">&quot;cainfo&quot;</code>.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.functions.dom">
   <h4 class="title">DOM</h4>

   <p class="para">
    El tipo de retorno de <span class="methodname"><a href="domcharacterdata.appenddata.php" class="methodname">DOMCharacterData::appendData()</a></span> ha sido cambiado
    a <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span>.
   </p>

   <p class="para">
    <span class="methodname"><a href="domdocument.loadhtml.php" class="methodname">DOMDocument::loadHTML()</a></span>,
    <span class="methodname"><a href="domdocument.loadhtmlfile.php" class="methodname">DOMDocument::loadHTMLFile()</a></span>, y
    <span class="methodname"><a href="domdocument.loadxml.php" class="methodname">DOMDocument::loadXML()</a></span> ahora tienen un tipo de
    retorno provisional de <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>. Anteriormente, esto estaba documentado
    como teniendo un tipo de retorno de <code class="code">DOMDocument|bool</code>, pero, desde PHP 8.0.0,
    <span class="classname"><a href="class.domdocument.php" class="classname">DOMDocument</a></span>
    no puede ser devuelto porque ya no es llamable estáticamente.
   </p>

  </div>

  <div class="sect3" id="migration83.other-changes.functions.gd">
   <h4 class="title">Gd</h4>

   <p class="para">
    La firma de <span class="function"><a href="function.imagerotate.php" class="function">imagerotate()</a></span> ha cambiado.
    El parámetro <code class="parameter">$ignore_transparent</code> ha sido eliminado,
    porque ha sido ignorado desde PHP 5.5.0.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.functions.intl">
   <h4 class="title">Intl</h4>

   <p class="para">
    <span class="function"><a href="intldateformatter.settimezone.php" class="function">datefmt_set_timezone()</a></span> (y sus alias
    <span class="methodname"><a href="intldateformatter.settimezone.php" class="methodname">IntlDateformatter::setTimeZone()</a></span>)
    ahora devuelve <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> en caso de éxito, anteriormente devolvía <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
   </p>

   <p class="para">
    <span class="methodname"><a href="intlbreakiterator.settext.php" class="methodname">IntlBreakiterator::setText()</a></span> ahora devuelve <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>
    en caso de fallo, anteriormente devolvía <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    Ahora devuelve <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> en caso de éxito, anteriormente devolvía <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
   </p>

   <p class="para">
    <span class="methodname"><a href="intlchar.enumcharnames.php" class="methodname">IntlChar::enumCharNames()</a></span> ahora devuelve un booleano.
    Anteriormente, devolvía <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> en caso de éxito y <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> en caso de fallo.
   </p>

   <p class="para">
    <span class="methodname"><a href="intldateformatter.create.php" class="methodname">IntlDateFormatter::__construct()</a></span> lanza una excepción <strong><code><a href="intl.constants.php#constant.u-illegal-argument-error">U_ILLEGAL_ARGUMENT_ERROR</a></code></strong>
    cuando se establece una localización inválida.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.functions.mbstring">
   <h4 class="title">MBString</h4>

   <p class="para">
    <span class="function"><a href="function.mb-strtolower.php" class="function">mb_strtolower()</a></span> y <span class="function"><a href="function.mb-convert-case.php" class="function">mb_convert_case()</a></span>
    implementan reglas de conversión de mayúsculas condicionales para la letra griega sigma.
    Para <span class="function"><a href="function.mb-strtolower.php" class="function">mb_strtolower()</a></span>,
    la conversión condicional se aplica solo a los modos <strong><code><a href="mbstring.constants.php#constant.mb-case-lower">MB_CASE_LOWER</a></code></strong>,
    y <strong><code><a href="mbstring.constants.php#constant.mb-case-title">MB_CASE_TITLE</a></code></strong>, no a los modos
    <strong><code><a href="mbstring.constants.php#constant.mb-case-lower-simple">MB_CASE_LOWER_SIMPLE</a></code></strong> y
    <strong><code><a href="mbstring.constants.php#constant.mb-case-title-simple">MB_CASE_TITLE_SIMPLE</a></code></strong>.
   </p>

   <p class="para">
    <span class="function"><a href="function.mb-decode-mimeheader.php" class="function">mb_decode_mimeheader()</a></span> interpreta los guiones bajos en
    las palabras codificadas MIME QPrint como requiere la RFC 2047; se convierten en espacios.
    Los guiones bajos deben ser codificados como <code class="literal">&quot;=5F&quot;</code> en tales palabras
    codificadas MIME.
   </p>

   <p class="para">
    En raros casos, <span class="function"><a href="function.mb-encode-mimeheader.php" class="function">mb_encode_mimeheader()</a></span> codificará
    su cadena de entrada donde la pasaría como ASCII puro en PHP 8.2.
   </p>

   <p class="para">
    <span class="function"><a href="function.mb-encode-mimeheader.php" class="function">mb_encode_mimeheader()</a></span> ya no elimina los bytes NUL
    (cero) al codificar QPrint de la cadena de entrada.
    Esto anteriormente corrompía las cadenas en algunos codificados de texto,
    especialmente UTF-16 y UTF-32, por mb_encode_mimeheader.
   </p>

   <p class="para">
    <span class="function"><a href="function.mb-detect-encoding.php" class="function">mb_detect_encoding()</a></span> en modo &quot;no estricto&quot; ahora se comporta
    como se describe en la documentación.
    Anteriormente, devolvía <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> si el mismo byte (por ejemplo, el primer
    byte) de la cadena de entrada era inválido en todos los codificados candidatos.
    Más generalmente, eliminaba los codificados candidatos de la consideración
    cuando se veía un byte inválido, y si el mismo byte de entrada eliminaba
    todos los codificados restantes aún bajo consideración, devolvía <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
    Por otro lado, si todos los codificados candidatos excepto uno eran eliminados
    de la consideración, devolvía el último restante sin tener en cuenta
    el número de errores de codificación que podrían encontrarse más adelante en la cadena.
    Esto es diferente del comportamiento descrito en la documentación, que
    dice: &quot;Si strict está definido en false, se devolverá el codificado más cercano.&quot;
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.functions.mysqli">
   <h4 class="title">mysqli</h4>

   <p class="para">
    <span class="function"><a href="mysqli-result.fetch-object.php" class="function">mysqli_fetch_object()</a></span> ahora lanza una
    <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span> en lugar de una <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span>
    cuando el argumento <code class="parameter">$constructor_args</code> no está vacío
    con la clase no teniendo un constructor.
   </p>

   <p class="para">
    <span class="function"><a href="mysqli.poll.php" class="function">mysqli_poll()</a></span> ahora lanza una <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span>
    cuando ni el argumento <code class="parameter">$read</code>
    ni el argumento <code class="parameter">$error</code> son pasados.
   </p>

   <p class="para">
    <span class="function"><a href="mysqli-result.field-seek.php" class="function">mysqli_field_seek()</a></span> y
    <span class="methodname"><a href="mysqli-result.field-seek.php" class="methodname">mysqli_result::field_seek()</a></span> ahora especifican el tipo
    de retorno como <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> en lugar de <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.functions.odbc">
   <h4 class="title">ODBC</h4>

   <p class="para">
    <span class="function"><a href="function.odbc-autocommit.php" class="function">odbc_autocommit()</a></span> ahora acepta <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> para el
    parámetro <code class="parameter">$enable</code>.
    Pasar <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> tiene el mismo comportamiento que pasar un solo parámetro,
    indicando si la funcionalidad autocommit está habilitada o no.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.functions.pgsql">
   <h4 class="title">PGSQL</h4>

   <p class="para">
    <span class="function"><a href="function.pg-fetch-object.php" class="function">pg_fetch_object()</a></span> ahora lanza una
    <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span> en lugar de una <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span>
    cuando el argumento <code class="parameter">$constructor_args</code> no está vacío
    con la clase no teniendo un constructor.
   </p>

   <p class="para">
    <span class="function"><a href="function.pg-insert.php" class="function">pg_insert()</a></span> ahora lanza una <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span>
    en lugar de una <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> cuando la tabla especificada es inválida.
   </p>

   <p class="para">
    <span class="function"><a href="function.pg-insert.php" class="function">pg_insert()</a></span> y <span class="function"><a href="function.pg-convert.php" class="function">pg_convert()</a></span> lanzan
    una <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span> o una <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>
    en lugar de un <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> cuando el valor/tipo de un campo
    no coincide correctamente con el tipo de PostgreSQL.
   </p>

   <p class="para">
    El parámetro <code class="parameter">$row</code> de
    <span class="function"><a href="function.pg-fetch-result.php" class="function">pg_fetch_result()</a></span>,
    <span class="function"><a href="function.pg-field-prtlen.php" class="function">pg_field_prtlen()</a></span>, y
    <span class="function"><a href="function.pg-field-is-null.php" class="function">pg_field_is_null()</a></span> ahora es nullable.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.functions.random">
   <h4 class="title">Random</h4>

   <p class="para">
    Cambio de <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span> y <span class="function"><a href="function.srand.php" class="function">srand()</a></span> para
    no verificar el número de argumentos para determinar si se debe usar una semilla
    aleatoria. Pasar <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> generará una semilla aleatoria, <code class="literal">0</code>
    usará cero como semilla. Las funciones ahora son coherentes con
    <span class="methodname"><a href="random-engine-mt19937.construct.php" class="methodname">Random\Engine\Mt19937::__construct()</a></span>.
   </p>

  </div>

  <div class="sect3" id="migration83.other-changes.functions.reflection">
   <h4 class="title">Reflection</h4>

   <p class="para">
    El tipo de retorno de <span class="methodname"><a href="reflectionclass.getstaticproperties.php" class="methodname">ReflectionClass::getStaticProperties()</a></span>
    ya no es nullable.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.functions.standard">
   <h4 class="title">Standard</h4>

   <p class="para">
    El <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> emitido por <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span>
    ha sido promovido a <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
    
   </p>

   <p class="para">
    <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> ahora emite un <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>
    si la entrada contiene bytes no consumidos.
    
   </p>

   <p class="para">
    <span class="function"><a href="function.array-pad.php" class="function">array_pad()</a></span> ya no está limitado solo por el número máximo
    de elementos que un array puede contener. Anteriormente, solo era posible
    añadir un máximo de 1,048,576 elementos a la vez.
   </p>

   <p class="para">
    <span class="function"><a href="function.strtok.php" class="function">strtok()</a></span> ahora lanza un <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> si el
    token no es proporcionado al iniciar la tokenización.
   </p>

   <p class="para">
    <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> ahora encadena la excepción subyacente
    <span class="classname"><a href="class.random-randomexception.php" class="classname">Random\RandomException</a></span>
    como <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span>&#039;s <code class="parameter">$previous</code>
    <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span> cuando falla la generación de sal.
   </p>

   <p class="para">
    Si un array es usado como <code class="parameter">$command</code> para
    <span class="function"><a href="function.proc-open.php" class="function">proc_open()</a></span>, debe tener al menos un elemento
    no vacío. De lo contrario, se lanza una <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span>.
   </p>

   <p class="para">
    <span class="function"><a href="function.proc-open.php" class="function">proc_open()</a></span> ahora devuelve <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> si el array <code class="parameter">$command</code>
    es un comando inválido en lugar de un objeto de recurso que produce una advertencia más tarde.
    Esto ya era el caso para Windows, pero ahora también es el caso si se usa una implementación posix_spawn
    (la mayoría de las plataformas Linux, BSD y MacOS). Sigue habiendo
    algunas plataformas antiguas donde este comportamiento no ha cambiado porque posix_spawn no es
    soportado allí.
   </p>

   <p class="para">
    <span class="function"><a href="function.array-sum.php" class="function">array_sum()</a></span> y <span class="function"><a href="function.array-product.php" class="function">array_product()</a></span> ahora emiten
    una advertencia cuando los valores del array no pueden ser convertidos en int/float.
    Anteriormente, los arrays y los objetos eran ignorados mientras que cada otro valor era
    convertido en int. Además, los objetos que definen una conversión numérica (por ejemplo
    <a href="book.gmp.php" class="link">GMP</a>) ahora son convertidos en lugar de ser ignorados.
    
   </p>

   <p class="para">
    El <code class="parameter">$decimals</code> de <span class="function"><a href="function.number-format.php" class="function">number_format()</a></span>
    ahora maneja enteros negativos.
    Redondear con un valor negativo para <code class="parameter">$decimals</code> significa
    que <code class="parameter">$num</code> es redondeado a <code class="parameter">$decimals</code>
    dígitos significativos antes del separador decimal.
    Anteriormente, los enteros negativos para <code class="parameter">$decimals</code> eran
    silenciosamente ignorados y el número era redondeado a cero decimales.
   </p>

   <p class="para">
    Se ha añadido un nuevo argumento <code class="parameter">$before_needle</code> a
    <span class="function"><a href="function.strrchr.php" class="function">strrchr()</a></span>. Se comporta como su homólogo en las
    funciones <span class="function"><a href="function.strstr.php" class="function">strstr()</a></span> o <span class="function"><a href="function.stristr.php" class="function">stristr()</a></span>.
   </p>

   <p class="para">
    <span class="function"><a href="function.str-getcsv.php" class="function">str_getcsv()</a></span> y <span class="function"><a href="function.fgetcsv.php" class="function">fgetcsv()</a></span> ahora devuelven
    una cadena vacía en lugar de una cadena con un solo byte nulo para el último campo
    que solo contiene un cierre no terminado.
   </p>
  </div>

 </div>

 <div class="sect2" id="migration83.other-changes.extensions">
  <h3 class="title">Otros cambios en las extensiones</h3>

  <div class="sect3" id="migration83.other-changes.extensions.core">
   <h4 class="title">Core</h4>

   <p class="para">
    Usar los operadores de <a href="language.operators.increment.php" class="link">incremento/decremento</a>
    (<code class="literal">++</code>/<code class="literal">--</code>) en valores de tipo
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> ahora emite advertencias.
    Esto se debe a que actualmente no tiene ningún efecto, pero se comportará como
    <code class="code">$bool += 1</code> en el futuro.
   </p>

   <p class="para">
    Usar el operador de <a href="language.operators.increment.php" class="link">decremento</a>
    (<code class="literal">--</code>) en valores de tipo <span class="type"><a href="language.types.null.php" class="type null">null</a></span> ahora emite advertencias.
    Esto se debe a que actualmente no tiene ningún efecto, pero se comportará como
    <code class="code">$null -= 1</code> en el futuro.
   </p>

   <p class="para">
    Los objetos internos que implementan un cast _IS_NUMBER pero no un gestionador do_operator
    que reemplace la adición y la sustracción ahora pueden ser incrementados y decrementados
    como si se hiciera <code class="code">$o += 1</code> o <code class="code">$o -= 1</code>.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.extensions.dom">
   <h4 class="title">DOM</h4>

   <p class="para">
    El mecanismo de duración de vida del DOM ha sido retrabajado de tal manera que los nodos
    implícitamente eliminados aún pueden ser recuperados. Anteriormente, esto causaba una excepción.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.extensions.sqlite3">
   <h4 class="title">SQLite3</h4>

   <p class="para">
    La clase <span class="classname"><a href="class.sqlite3.php" class="classname">SQLite3</a></span> ahora lanza una
    <span class="classname"><a href="class.sqlite3exception.php" class="classname">SQLite3Exception</a></span> (extensión de
    <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span>) en lugar de <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span>.
   </p>

   <p class="para">
    El código de error SQLite ahora se pasa en el código de error de la excepción
    en lugar de estar incluido en el mensaje de error.
   </p>

  </div>
 </div>

 <div class="sect2" id="migration83.other-changes.ini">
  <h3 class="title">Cambio en la gestión del archivo INI</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Los parámetros INI <code class="literal">assert.*</code> han sido depreciados.
     Esto incluye los siguientes parámetros INI:
     <ul class="simplelist">
      <li><a href="info.configuration.php#ini.assert.active" class="link">assert.active</a></li>
      <li><a href="info.configuration.php#ini.assert.bail" class="link">assert.bail</a></li>
      <li><a href="info.configuration.php#ini.assert.callback" class="link">assert.callback</a></li>
      <li><a href="info.configuration.php#ini.assert.exception" class="link">assert.exception</a></li>
      <li><a href="info.configuration.php#ini.assert.warning" class="link">assert.warning</a></li>
     </ul>
     Si el valor del parámetro es igual al valor por defecto, no se emite ninguna advertencia de depreciación.
     El parámetro INI <a href="ini.core.php#ini.zend.assertions" class="link">zend.assertions</a>
     debería usarse en su lugar.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <a href="info.configuration.php#ini.zend.max-allowed-stack-size" class="link">zend.max_allowed_stack_size</a>
     es una nueva directiva INI para definir el tamaño máximo de la pila permitida.
     Los valores posibles son <code class="literal">0</code> (detectar el tamaño máximo de la pila del proceso o del hilo),
     <code class="literal">-1</code> (sin límite), o un número positivo de bytes.
     El valor por defecto es <code class="literal">0</code>.
     Cuando no es posible detectar el tamaño máximo de la pila del proceso o del hilo,
     se usa un valor por defecto del sistema conocido.
     Definir este valor demasiado alto tiene el mismo efecto que deshabilitar el límite de tamaño de la pila.
     Las fibras usan
     <a href="info.configuration.php#ini.fiber.stack-size" class="link">fiber.stack_size</a>
     como tamaño máximo de la pila permitida.
     Se lanza una <span class="classname"><a href="class.error.php" class="classname">Error</a></span> cuando la pila de llamadas del proceso excede
     <a href="info.configuration.php#ini.zend.max-allowed-stack-size" class="link">zend.max_allowed_stack_size</a>-<a href="info.configuration.php#ini.zend.reserved-stack-size" class="link">zend.reserved_stack_size</a>
     bytes, para evitar errores de segmentación debidos a un desbordamiento de pila,
     con el objetivo de facilitar la depuración.
     El tamaño de la pila aumenta durante las recursiones no controladas que involucran funciones internas
     o los métodos mágicos
     <a href="language.oop5.magic.php#object.tostring" class="link">__toString()</a>,
     <a href="language.oop5.cloning.php#object.clone" class="link">__clone()</a>,
     <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a>,
     <a href="language.oop5.decon.php#object.destruct" class="link">__destruct()</a>.
     Esto no está relacionado con los desbordamientos de buffer de pila, y no es una característica de seguridad.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <a href="info.configuration.php#ini.zend.reserved-stack-size" class="link">zend.reserved_stack_size</a>
     es una nueva directiva INI para definir el tamaño de la pila reservada, en bytes.
     Esto se resta del tamaño máximo de la pila
     permitida, como un buffer, al verificar el tamaño de la pila.
    </p>
   </li>
   </ul>
 </div>

 <div class="sect2" id="migration83.other-changes.performance">
  <h3 class="title">Rendimiento</h3>

  <div class="sect3" id="migration83.other-changes.performance.dom">
   <h4 class="title">DOM</h4>

   <p class="para">
    Iterar sobre un <span class="classname"><a href="class.domnodelist.php" class="classname">DOMNodeList</a></span> ahora usa un caché. Por lo tanto,
    solicitar elementos ya no toma tiempo cuadrático por defecto.
   </p>

   <p class="para">
    Obtener el contenido textual de los nodos ahora evita una asignación, lo que resulta
    en una mejora de rendimiento.
   </p>

   <p class="para">
    <span class="methodname"><a href="domchildnode.remove.php" class="methodname">DOMChildNode::remove()</a></span> ahora se ejecuta en O(1) rendimiento.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.performance.standard">
   <h4 class="title">Standard</h4>

   <p class="para">
    La bandera <span class="function"><a href="function.file.php" class="function">file()</a></span> para la verificación de errores ahora es aproximadamente un 7% más rápida.
   </p>
  </div>

  <div class="sect3" id="migration83.other-changes.performance.spl">
   <h4 class="title">SPL</h4>

   <p class="para">
    <span class="classname"><a href="class.recursivedirectoryiterator.php" class="classname">RecursiveDirectoryIterator</a></span> ahora realiza menos E/S
    al recorrer un directorio.
   </p>
  </div>
 </div>

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