<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration84.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'migration84.other-changes.php',
    1 => 'Outras Altera&ccedil;&otilde;es',
    2 => 'Outras Altera&ccedil;&otilde;es',
  ),
  'up' => 
  array (
    0 => 'migration84.php',
    1 => 'Migrando do PHP 8.3.x para o PHP 8.4.x',
  ),
  'prev' => 
  array (
    0 => 'migration84.removed-extensions.php',
    1 => 'Extens&otilde;es Removidas',
  ),
  'next' => 
  array (
    0 => 'migration84.windows-support.php',
    1 => 'Suporte ao Windows',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'appendices/migration84/other-changes.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration84.other-changes" class="sect1">
 <h2 class="title">Outras Alterações</h2>

 <div class="sect2" id="migration84.other-changes.core">
  <h3 class="title">Alterações no Núcleo do PHP</h3>

  <div class="sect3" id="migration84.other-changes.core.closures">
   <h4 class="title">Closures</h4>

   <p class="simpara">
    Os nomes de closures foram ajustados para incluir o nome da função-mãe
    e a linha de suas definições para tornar mais fácil distingui-las, por exemplo,
    dentro de rastreamentos de pilha.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.core.fibers">
   <h4 class="title">Fibers</h4>

   <p class="simpara">
    Troca de Fiber durante a execução do destrutor não é permitida. Foi bloqueada
    anteriormente devido a conflitos com a coleta de lixo.
   </p>

   <p class="simpara">
    Destrutores agora podem ser executados em uma Fiber separada:
   </p>

   <p class="simpara">
    Quando a coleta de lixo é acionada em uma Fiber,
    os destrutores chamados pelo coletor de lixo são executados em uma fibra separada:
    o gc_destructor_fiber.
    Se esta Fiber for suspensa, uma nova será criada para executar os destrutores
    restantes.
    O gc_destructor_fiber anterior não é mais referenciado pelo coletor de lixo
    e pode ser coletado se não for referenciado em nenhum outro lugar.
    Objetos cujos destrutores estão suspensos não serão coletados até que o
    destrutor retorne ou a <span class="classname"><a href="class.fiber.php" class="classname">Fiber</a></span> seja coletada.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.core.output">
   <h4 class="title">Manipuladores de Saída</h4>

   <p class="simpara">
    As opções de status do manipulador de saída passadas no parâmetro <code class="parameter">flags</code>
    da função <span class="function"><a href="function.ob-start.php" class="function">ob_start()</a></span> agora são limpas.
   </p>

   <p class="simpara">
    <span class="function"><a href="function.output-add-rewrite-var.php" class="function">output_add_rewrite_var()</a></span> agora usa
    <a href="outcontrol.configuration.php#ini.url-rewriter.hosts" class="link"><code class="literal">url_rewriter.hosts</code></a>
    ao invés de
    <a href="session.configuration.php#ini.session.trans-sid-hosts" class="link"><code class="literal">session.trans_sid_hosts</code></a>
    para selecionar hosts que serão sobrescritos.
   </p>
  </div>
 </div>

 <div class="sect2" id="migration84.other-changes.sapi">
  <h3 class="title">Alterações em Módulos SAPI</h3>

  <div class="sect3" id="migration84.other-changes.sapi.apache">
   <h4 class="title">apache2handler</h4>

   <p class="simpara">
    Suporte para o Apache versões 2.0 e 2.2 foi removido (fim de vida dessas versões).
    A versão mínima requerida para o Apache é agora a 2.4.
   </p>
  </div>

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

   <p class="simpara">
    O servidor interno procura um arquivo de índice recursivamente, percorrendo os
    diretórios pais caso o arquivo especificado não possa ser localizado.
    Este processo era ignorado anteriormente se o caminho parecesse se
    referir a um arquivo, ou seja, se o último componente do caminho contivesse um ponto.
    Nesse caso, um erro 404 era retornado.
    O comportamento foi alterado para procurar um arquivo de índice em todos os casos.
   </p>
  </div>

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

   <p class="simpara">
    Descarregar cabeçalhos sem um corpo agora será uma operação bem sucedida.
    
   </p>

   <p class="simpara">
    A página de status tem um novo campo para exibir um pico de uso de memória.
   </p>

   <p class="simpara">
    
    A configuração <code class="literal">events.mechanism</code> do arquivo <var class="filename">/dev/poll</var>
    para Solaris/Illumos foi descontinuada.
   </p>
  </div>
 </div>

 <div class="sect2" id="migration84.other-changes.functions">
  <h3 class="title">Funções Alteradas</h3>

  <div class="sect3" id="migration84.other-changes.functions.core">
   <h4 class="title">Núcleo do PHP</h4>

   <p class="simpara">
    <span class="function"><a href="function.trigger-error.php" class="function">trigger_error()</a></span> e <span class="function"><a href="function.user-error.php" class="function">user_error()</a></span>
    agora têm um tipo de retorno <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> ao invés de <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
   </p>
  </div>

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

   <p class="simpara">
    <span class="methodname"><a href="domdocument.registernodeclass.php" class="methodname">DOMDocument::registerNodeClass()</a></span>
    agora tem um tipo provisório de retorno de <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> ao invés de
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
    O método retornaria somente <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> na prática.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.hash">
   <h4 class="title">Hash</h4>

   <p class="simpara">
    <span class="function"><a href="function.hash-update.php" class="function">hash_update()</a></span>
    agora tem um tipo provisório de retorno de <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> ao invés de
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
    O método retornaria somente <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> na prática.
   </p>
  </div>

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

   <p class="simpara">
    <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-toward-zero">NumberFormatter::ROUND_TOWARD_ZERO</a></code></strong> e
    <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-away-from-zero">NumberFormatter::ROUND_AWAY_FROM_ZERO</a></code></strong>
    foram adicionadas como sinônimos para
    <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-down">NumberFormatter::ROUND_DOWN</a></code></strong> e
    <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-up">NumberFormatter::ROUND_UP</a></code></strong>
    para ficarem consistentes com os novos modos
    <strong><code><a href="math.constants.php#constant.php-round-half-up">PHP_ROUND_<span class="replaceable">*</span></a></code></strong>.
   </p>

   <p class="simpara">
    <span class="methodname"><a href="resourcebundle.get.php" class="methodname">ResourceBundle::get()</a></span>
    
    agora tem um tipo de retorno provisório de <code class="literal">ResourceBundle|array|string|int|null</code>.
   </p>

   <p class="simpara">
    As funções <span class="function"><a href="function.idn-to-ascii.php" class="function">idn_to_ascii()</a></span> e <span class="function"><a href="function.idn-to-utf8.php" class="function">idn_to_utf8()</a></span>
    agora sempre lançam <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>s
    se o nome em <code class="parameter">domain</code> estiver vazio ou for muito longo.
   </p>

   <p class="simpara">
    As funções <span class="function"><a href="function.idn-to-ascii.php" class="function">idn_to_ascii()</a></span> e <span class="function"><a href="function.idn-to-utf8.php" class="function">idn_to_utf8()</a></span>
    agora sempre lançam <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>
    se o parâmetro <code class="parameter">variant</code> não for
    <strong><code><a href="intl.constants.php#constant.intl-idna-variant-uts46">INTL_IDNA_VARIANT_UTS46</a></code></strong>.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.libxml">
   <h4 class="title">LibXML</h4>

   <p class="simpara">
    <span class="function"><a href="function.libxml-set-streams-context.php" class="function">libxml_set_streams_context()</a></span> agora imediatamente lança um
    <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span> quando um recurso que não seja de
    contexto de fluxo é passado para a função,
    ao invés de lançar mais tarde quando o contexto de fluxo for usado.
   </p>
  </div>

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

   <p class="simpara">
    O comportamento de <span class="function"><a href="function.mb-strcut.php" class="function">mb_strcut()</a></span> é mais consistente
    agora em relação a strings UTF-8 e UTF-16 inválidas.
    Não há alteração de comportamento para strings UTF-8 e UTF-16 válidas.
   </p>
  </div>

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

   <p class="simpara">
    O parâmetro <code class="parameter">row</code> das funções
    <span class="function"><a href="function.odbc-fetch-object.php" class="function">odbc_fetch_object()</a></span>,
    <span class="function"><a href="function.odbc-fetch-array.php" class="function">odbc_fetch_array()</a></span> e
    <span class="function"><a href="function.odbc-fetch-into.php" class="function">odbc_fetch_into()</a></span> agora tem o valor padrão de <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>,
    consistente com <span class="function"><a href="function.odbc-fetch-row.php" class="function">odbc_fetch_row()</a></span>.
    Anteriormente, os valores padrão eram
    <code class="literal">-1</code>,
    <code class="literal">-1</code>
    e <code class="literal">0</code>,
    respectivamente.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.openssl">
   <h4 class="title">OpenSSL</h4>

   <p class="simpara">
    O parâmetro <code class="parameter">extra_attributes</code> da função
    <span class="function"><a href="function.openssl-csr-new.php" class="function">openssl_csr_new()</a></span> agora define os atributos <abbr title="Certificate Signing Request">CSR</abbr>
    ao invés do DN, antes era feito incorretamente.
   </p>

   <p class="simpara">
    O parâmetro <code class="parameter">dn</code> na função
    <span class="function"><a href="function.openssl-csr-new.php" class="function">openssl_csr_new()</a></span> permite definir um <span class="type"><a href="language.types.array.php" class="type array">array</a></span>
    de valores para uma única entrada.
   </p>

   <p class="simpara">
    Novo parâmetro <code class="parameter">serial_hex</code> adicionado à função
    <span class="function"><a href="function.openssl-csr-sign.php" class="function">openssl_csr_sign()</a></span> para permitir a definição de números seriais
    em formato hexadecimal.
   </p>

   <p class="simpara">
    Analisar um horário UTC ASN.1 com <span class="function"><a href="function.openssl-x509-parse.php" class="function">openssl_x509_parse()</a></span>
    falha se os segundos forem omitidos para versões do OpenSSL menores que 3.2
    (<code class="literal">-1</code> é retornado para esses campos).
    As versões do OpenSSL maiores que 3.3 já não carregam esses certificados.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.pdo">
   <h4 class="title">PDO</h4>

   <p class="simpara">
    Agora é possível buscar o valor do atributo
    <strong><code><a href="pdo.constants.php#pdo.constants.attr-stringify-fetches">PDO::ATTR_STRINGIFY_FETCHES</a></code></strong> com o método
    <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span>.
   </p>

   <p class="simpara">
    Uma nova constante <strong><code>PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE</code></strong>
    foi adicionada para recuperar o uso de memória de resultados de consultas com o método
    <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span> para drivers que suportam isso.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.pdo-firebird">
   <h4 class="title">PDO_FIREBIRD</h4>

   <p class="simpara">
    Agora é possível buscar o valor dos atributos
    
    <strong><code>FB_ATTR_DATE_FORMAT</code></strong>,
    <strong><code>FB_ATTR_TIME_FORMAT</code></strong> e
    <strong><code>FB_ATTR_TIMESTAMP_FORMAT</code></strong>
    com o método
    
    <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span>.
   </p>

   <p class="para">
    Adicionados novos atributos para especificar o nível de isolamento da transação e o modo de acesso.
    Foram adicionadas cinco constantes relacionadas a esta funcionalidade:

    <ul class="simplelist">
     <li><strong><code><a href="class.pdo-firebird.php#pdo-firebird.constants.transaction-isolation-level">Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL</a></code></strong></li>
     <li><strong><code><a href="class.pdo-firebird.php#pdo-firebird.constants.read-committed">Pdo\Firebird::READ_COMMITTED</a></code></strong></li>
     <li><strong><code><a href="class.pdo-firebird.php#pdo-firebird.constants.repeatable-read">Pdo\Firebird::REPEATABLE_READ</a></code></strong></li>
     <li><strong><code><a href="class.pdo-firebird.php#pdo-firebird.constants.serializable">Pdo\Firebird::SERIALIZABLE</a></code></strong></li>
     <li><strong><code><a href="class.pdo-firebird.php#pdo-firebird.constants.writable-transaction">Pdo\Firebird::WRITABLE_TRANSACTION</a></code></strong></li>
    </ul>
   </p>

   <p class="simpara">
    Ao usar conexões persistentes, agora há uma verificação de atividade no
    construtor.
   </p>

   <p class="simpara">
    O conteúdo criado muda dependendo do valor de
    <strong><code>FB_API_VER</code></strong> em
    <var class="filename">ibase.h</var>.
    Um novo método estático <span class="methodname"><a href="pdo-firebird.getapiversion.php" class="methodname">Pdo\Firebird::getApiVersion()</a></span>
    pode ser usado para obter esta informação.
    Esta informação agora também é referenciada em <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>.
   </p>

   <p class="para">
    Cinco novos tipos de dados estão agora disponíveis:
    <span class="simplelist"><code class="literal">INT128</code>, <code class="literal">DEC16</code>, <code class="literal">DEC34</code>, <code class="literal">TIMESTAMP_TZ</code>, <code class="literal">TIME_TZ</code></span>
    .
    Eles estão disponíveis a partir do Firebird 4.0.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.pdo-mysql">
   <h4 class="title">PDO_MYSQL</h4>

   <p class="simpara">
    Agora é possível buscar o valor do atributo
    <strong><code><a href="pdo.constants.php#pdo.constants.attr-fetch-table-names">PDO::ATTR_FETCH_TABLE_NAMES</a></code></strong> com o método
    
    <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.pdo-pgsql">
   <h4 class="title">PDO_PGSQL</h4>

   <p class="simpara">
    Adicionado suporte à recuperação de uso de memória de consultas com
    <strong><code>PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE</code></strong>.
   </p>

   <p class="simpara">
    Se a coluna for do tipo <code class="literal">FLOAT4OID</code> ou
    <code class="literal">FLOAT8OID</code>, o valor agora será retornado como um
    <span class="type"><a href="language.types.float.php" class="type float">float</a></span> ao invés de <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
   </p>
  </div>

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

   <p class="simpara">
    O parâmetro <code class="parameter">conditions</code> da função
    <span class="function"><a href="function.pg-select.php" class="function">pg_select()</a></span> agora é opcional e aceita um array vazio.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.phar">
   <h4 class="title">Phar</h4>

   <p class="para">
    Os métodos
    <span class="simplelist"><span class="methodname"><a href="phar.setalias.php" class="methodname">Phar::setAlias()</a></span>, <span class="methodname"><a href="phar.setdefaultstub.php" class="methodname">Phar::setDefaultStub()</a></span></span>
    agora têm um tipo de retorno provisório de <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span>
    ao invés de <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.posix">
   <h4 class="title">POSIX</h4>

   <p class="simpara">
    <span class="function"><a href="function.posix-isatty.php" class="function">posix_isatty()</a></span> agora define o número do erro quando o
    argumento de descritor de arquivo ou fluxo for inválido.
   </p>
  </div>

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

   <p class="simpara">
    O método <span class="methodname"><a href="reflectiongenerator.getfunction.php" class="methodname">ReflectionGenerator::getFunction()</a></span>
    agora pode ser chamado depois que o gerador termina a execução.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.sockets">
   <h4 class="title">Sockets</h4>

   <p class="simpara">
    O parâmetro <code class="parameter">backlog</code> da função
    <span class="function"><a href="function.socket-create-listen.php" class="function">socket_create_listen()</a></span> agora tem um valor padrão de
    <strong><code><a href="sockets.constants.php#constant.somaxconn">SOMAXCONN</a></code></strong>.
    Anteriormente, era <code class="literal">128</code>.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.sodium">
   <h4 class="title">Sodium</h4>

   <p class="simpara">
    As funções <span class="function">sodium_crypto_aead_aes256gcm_<span class="replaceable">*</span></span>
    agora estão disponíveis em CPUs aarch64 CPUs com as extensões criptográficas
    ARM.
   </p>
  </div>

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

   <p class="para">
    Os métodos
    <span class="simplelist"><span class="methodname"><a href="splpriorityqueue.insert.php" class="methodname">SplPriorityQueue::insert()</a></span>, <span class="methodname"><a href="splpriorityqueue.recoverfromcorruption.php" class="methodname">SplPriorityQueue::recoverFromCorruption()</a></span>, <span class="methodname"><a href="splheap.insert.php" class="methodname">SplHeap::insert()</a></span>, <span class="methodname"><a href="splheap.recoverfromcorruption.php" class="methodname">SplHeap::recoverFromCorruption()</a></span></span>
    agora têm um tipo de retorno provisório de <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span>
    ao invés de <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
   </p>

   <p class="simpara">
    A classe <span class="classname"><a href="class.splobjectstorage.php" class="classname">SplObjectStorage</a></span> agora implementa
    a interface <span class="interfacename"><a href="class.seekableiterator.php" class="interfacename">SeekableIterator</a></span>.
   </p>
  </div>

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

   <p class="simpara">

    O valor padrão <code class="literal">&#039;cost&#039;</code> para o algoritmo de hash <strong><code><a href="password.constants.php#constant.password-bcrypt">PASSWORD_BCRYPT</a></code></strong>
    da função <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> aumentou de
    <code class="literal">10</code> para <code class="literal">12</code>.
    
   </p>

   <p class="simpara">
    A função <span class="function"><a href="function.debug-zval-dump.php" class="function">debug_zval_dump()</a></span> agora indica se um array está empacotado.
   </p>

   <p class="simpara">
    <span class="function"><a href="function.long2ip.php" class="function">long2ip()</a></span> agora tem um tipo de retorno <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
    
    ao invés de <code class="literal">string|false</code>.
   </p>

   <p class="simpara">
    
    <span class="function"><a href="function.highlight-string.php" class="function">highlight_string()</a></span> agora tem um tipo de retorno
    <span class="type">string|true</span> ao invés de <code class="literal">string|bool</code>.
   </p>

   <p class="simpara">
    
    <span class="function"><a href="function.print-r.php" class="function">print_r()</a></span> agora tem um tipo de retorno
    <span class="type">string|true</span> ao invés de <code class="literal">string|bool</code>.
   </p>

   
   <div class="sect4">
    <h5 class="title">Arredondando com <span class="function"><a href="function.round.php" class="function">round()</a></span></h5>

    <p class="simpara">
     O parâmetro <code class="parameter">mode</code> da
     função <span class="function"><a href="function.round.php" class="function">round()</a></span> foi ampliado para
     
     <code class="literal">RoundingMode|int</code>,
     
     aceitando instâncias de uma nova enumeração <span class="classname"><a href="enum.roundingmode.php" class="classname">RoundingMode</a></span>.
     
    </p>

    <p class="para">
     Quatro novos modos foram adicionados à função <span class="function"><a href="function.round.php" class="function">round()</a></span>:
     <span class="simplelist">RoundingMode::PositiveInfinity, RoundingMode::NegativeInfinity, RoundingMode::TowardsZero, RoundingMode::AwayFromZero</span>
     
    </p>

    <p class="simpara">
     A implementação interna para arredondamento para números inteiros foi reescrita
     para ser mais fácil de verificar a precisão e para ser mais fácil de manter.
     Alguns problemas de arredondamento foram corrigidos como resultado da reescrita.
     Por exemplo, arredondar anteriormente <code class="literal">0.49999999999999994</code>
     para o número inteiro mais próximo resultaria em <code class="literal">1.0</code>
     ao invés do resultado correto <code class="literal">0.0</code>.
     Entradas adicionais também podem ser afetadas e resultar em resultados diferentes
     em comparação com versões anteriores do PHP.
    </p>

    <p class="simpara">
     Foi corrigido um problema causado pelo &quot;pré-arredondamento&quot; da função <span class="function"><a href="function.round.php" class="function">round()</a></span>.
     Anteriormente, era usado um &quot;pré-arredondamento&quot; para tratar um valor como <code class="literal">0.285</code>
     (na verdade <code class="literal">0.28499999999999998</code>) como um número decimal
     e arredondá-lo para <code class="literal">0.29</code>.
     No entanto, o &quot;pré-arredondamento&quot; arredonda incorretamente determinados números,
     portanto, essa correção remove o &quot;pré-arredondamento&quot; e altera a forma como os números são comparados,
     para que os valores sejam arredondados corretamente como números decimais.
    </p>

    <p class="simpara">
     A precisão máxima que pode ser tratada por <span class="function"><a href="function.round.php" class="function">round()</a></span>
     foi estendida em um dígito.
     Por exemplo, <code class="code">round(4503599627370495.5)</code> retornava
     <code class="literal">4503599627370495.5</code>,
     mas agora retorna <code class="literal">4503599627370496</code>.
    </p>

   </div>
  </div>

 </div>

 <div class="sect2" id="migration84.other-changes.extensions">
  <h3 class="title">Outras Alterações em Extensões</h3>

  <div class="sect3" id="migration84.other-changes.extensions.curl">
   <h4 class="title">cURL</h4>

   <p class="simpara">
    A versão mínima do libcurl necessária agora é 7.61.0.
   </p>

   <p class="simpara">
    A opção <strong><code><a href="curl.constants.php#constant.curlopt-dns-use-global-cache">CURLOPT_DNS_USE_GLOBAL_CACHE</a></code></strong> não tem mais
    efeito e é ignorada silenciosamente.
    Este recurso subjacente foi descontinuado na libcurl 7.11.1
    e removido na libcurl 7.62.0.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.gmp">
   <h4 class="title">GMP</h4>

   
   <p class="simpara">
    Converter um objeto <span class="classname"><a href="class.gmp.php" class="classname">GMP</a></span> para <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> agora é
    possível em vez de emitir um <strong><code><a href="errorfunc.constants.php#constant.e-recoverable-error">E_RECOVERABLE_ERROR</a></code></strong>.
    O comportamento de conversão é sobrecarregado de modo que um objeto <span class="classname"><a href="class.gmp.php" class="classname">GMP</a></span>
    representando o valor <code class="literal">0</code> seja convertido em <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.libxml">
   <h4 class="title">LibXML</h4>

   <p class="simpara">
    A versão mínima da libxml2 necessária agora é 2.9.4.
   </p>
  </div>

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

   <p class="simpara">
    O comportamento da classe Intl foi normalizado para sempre lançar exceções
    <span class="exceptionname"><a href="class.error.php" class="exceptionname">Error</a></span> ao tentar usar
    um objeto não inicializado ou quando a clonagem falhar.
   </p>
  </div>

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

   <p class="simpara">
    As tabelas de dados Unicode foram atualizadas para Unicode 16.0.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.mysqlnd">
   <h4 class="title">MySQLnd</h4>

   <p class="simpara">
    Suporte para o novo tipo de dados VECTOR do MySQL 9.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.openssl">
   <h4 class="title">OpenSSL</h4>

   <p class="simpara">
    A versão mínima do OpenSSL necessária agora é 1.1.1.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.pdo-pgsql">
   <h4 class="title">PDO_PGSQL</h4>

   <p class="simpara">
    A versão mínima da libpq necessária agora é 10.0.
   </p>
  </div>

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

   <p class="simpara">
    A versão mínima da libpq necessária agora é 10.0.
   </p>
  </div>

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

   <p class="simpara">
    Acessos fora dos limites em <span class="classname"><a href="class.splfixedarray.php" class="classname">SplFixedArray</a></span> agora lançam
    exceções do tipo <span class="exceptionname"><a href="class.outofboundsexception.php" class="exceptionname">OutOfBoundsException</a></span>
    em vez de <span class="exceptionname"><a href="class.runtimeexception.php" class="exceptionname">RuntimeException</a></span>.
    Como <span class="exceptionname"><a href="class.outofboundsexception.php" class="exceptionname">OutOfBoundsException</a></span> é uma classe
    filha de <span class="exceptionname"><a href="class.runtimeexception.php" class="exceptionname">RuntimeException</a></span> nenhuma mudança
    comportamental é exibida ao tentar capturar essas exceções.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.xsl">
   <h4 class="title">XSL</h4>

   <p class="simpara">
    As propriedades tipadas <span class="property"><a href="class.xsltprocessor.php#xsltprocessor.props.clonedocument">XSLTProcessor::$cloneDocument</a></span>
    e <span class="property"><a href="class.xsltprocessor.php#xsltprocessor.props.doxinclude">XSLTProcessor::$doXInclude</a></span> agora são declaradas.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.zlib">
   <h4 class="title">Zlib</h4>

   <p class="simpara">
    A versão mínima do zlib necessária agora é 1.2.11.
   </p>
  </div>
 </div>

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

  <div class="sect3" id="migration84.other-changes.performance.core">
   <h4 class="title">Núcleo do PHP</h4>

   <p class="simpara">
    Foi melhorado o desempenho da análise e formatação de números de ponto flutuante em
    compilações ZTS sob cargas altamente simultâneas.
    Isso afeta a família de funções <span class="function"><a href="function.printf.php" class="function">printf()</a></span>, bem como
    funções de serialização, como <span class="function"><a href="function.json-encode.php" class="function">json_encode()</a></span>
    ou <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span>.
   </p>

   <p class="simpara">
    <span class="function"><a href="function.sprintf.php" class="function">sprintf()</a></span> usando apenas os especificadores <code class="literal">%s</code>
    e <code class="literal">%d</code> serão compilados na interpolação de
    string equivalente, evitando a sobrecarga de uma chamada de função e
    a análise repetitiva da string de formato.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.bcmath">
   <h4 class="title">BCMath</h4>

   <p class="simpara">
    O desempenho das conversões e operações numéricas foi melhorado.
   </p>
  </div>

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

   <p class="simpara">
    O desempenho de <span class="methodname"><a href="domnode.c14n.php" class="methodname">DOMNode::C14N()</a></span> foi bastante
    melhorado para o caso sem uma consulta xpath.
    Isso pode proporcionar uma melhoria de tempo de facilmente duas ordens de
    magnitude para documentos com dezenas de milhares de nós.
   </p>

   <p class="simpara">
    Melhoria no desempenho e redução do consumo de memória da serialização XML.
   </p>

   <p class="simpara">
    Uso reduzido de memória de classes de nós.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.ftp">
   <h4 class="title">FTP</h4>

   <p class="simpara">
    Melhorado o desempenho de uploads de FTP em até um fator de 10x para
    uploads grandes.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.hash">
   <h4 class="title">Hash</h4>

   <p class="simpara">
    Adicionadas implementações SSE2 e SHA-NI do SHA-256.
    Isso melhora o desempenho em CPUs suportadas em aproximadamente 1,3x (SSE2)
    e 3x - 5x (SHA-NI).
    Créditos para Colin Percival / Tarsnap por esta otimização.
   </p>
  </div>

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

   <p class="simpara">
    <span class="function"><a href="function.mb-strcut.php" class="function">mb_strcut()</a></span> é muito mais rápida agora para
    strings UTF-8 e UTF-16.
   </p>

   <p class="simpara">
    Pesquisar nomes de codificação mbstring é muito mais rápido agora.
   </p>

   <p class="simpara">
    O desempenho da conversão de SJIS-win em Unicode foi bastante melhorado.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.mysqlnd">
   <h4 class="title">MySQLnd</h4>

   <p class="simpara">
    Melhorou o desempenho da cotação do MySQLnd.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.pcre">
   <h4 class="title">PCRE</h4>

   <p class="simpara">
    Melhorado o desempenho de grupos de captura nomeados.
   </p>
  </div>

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

   <p class="simpara">
    Melhorado o desempenho de <span class="classname"><a href="class.random-randomizer.php" class="classname">Random\Randomizer</a></span>,
    com foco específico nos métodos
    <span class="methodname"><a href="random-randomizer.getbytes.php" class="methodname">Random\Randomizer::getBytes()</a></span>
    e <span class="methodname"><a href="random-randomizer.getbytesfromstring.php" class="methodname">Random\Randomizer::getBytesFromString()</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.simplexml">
   <h4 class="title">SimpleXML</h4>

   <p class="simpara">
    Melhor desempenho e redução do consumo de memória da serialização XML.
   </p>
  </div>

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

   <p class="simpara">
    O desempenho de <span class="function"><a href="function.strspn.php" class="function">strspn()</a></span> e
    <span class="function"><a href="function.strcspn.php" class="function">strcspn()</a></span> foi bastante melhorado.
    Elas agora são executadas em tempo linear em vez de serem limitadas por tempo quadrático.
   </p>

   <p class="simpara">
    Melhorado o desempenho de <span class="function"><a href="function.strpbrk.php" class="function">strpbrk()</a></span>.
   </p>

   <p class="simpara">
    <span class="function"><a href="function.get-browser.php" class="function">get_browser()</a></span> é muito mais rápido agora,
    até 1.5x - 2.5x para alguns casos de testes.
   </p>
  </div>
 </div>

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