<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'migration83.other-changes.php',
    1 => 'Outras mudan&ccedil;as',
    2 => 'Outras mudan&ccedil;as',
  ),
  'up' => 
  array (
    0 => 'migration83.php',
    1 => 'Migrando do PHP 8.2.x para o PHP 8.3.x',
  ),
  'prev' => 
  array (
    0 => 'migration83.deprecated.php',
    1 => 'Recursos Descontinuados',
  ),
  'next' => 
  array (
    0 => 'migration83.windows-support.php',
    1 => 'Suporte do Windows',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Outras mudanças</h2>

 <div class="sect2" id="migration83.other-changes.core">
  <h3 class="title">Mudanças no Core</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> agora é permitido durante o carregamento antecipado
    quando <a href="opcache.configuration.php#ini.opcache.preload-user" class="link">opcache.preload_user</a>
    é o usuário do sistema atual. Anteriormente,
    chamar <span class="methodname"><a href="ffi.load.php" class="methodname">FFI::load()</a></span> não era possível
    durante o carregamento antecipado se a diretiva
    <a href="opcache.configuration.php#ini.opcache.preload-user" class="link">opcache.preload_user</a>
    estivesse definida.
   </p>
  </div>

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

   <p class="para">
    O teste CLI do FPM agora falha se o caminho do socket for mais longo do que o suportado pelo sistema operacional.
   </p>
  </div>

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

   <p class="para">
    Nas SAPIs CLI e phpdbg, o carregamento antecipado não exige mais que a
    diretiva <a href="opcache.configuration.php#ini.opcache.preload-user" class="link">opcache.preload_user</a>
    esteja configurada ao ser executado como root.
    Nas outras SAPIs, essa diretiva é necessária ao ser executado como root,
    pois o carregamento antecipado é feito antes da SAPI mudar para um usuário não privilegiado.
   </p>
  </div>

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

   <p class="para">
    A função <span class="function"><a href="function.fread.php" class="function">fread()</a></span> de bloqueio em uma conexão de socket
    agora retorna imediatamente se houver dados em buffer, em vez de esperar por mais dados.
   </p>

   <p class="para">
    Uma memória de fluxo não falha mais se o deslocamento de busca estiver além do final.
    Em vez disso, a memória é aumentada na próxima gravação e os dados entre o antigo final e o
    deslocamento são preenchidos com bytes zero, da mesma forma como acontece com arquivos.
   </p>

   <p class="para">
    Operações de acesso ao <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> e similares agora usarão o caminho real
    em vez do caminho real do fluxo. Isso é consistente com a abertura de
    fluxos.
   </p>
  </div>
 </div>

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

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

   <p class="para">
    Os fluxos <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> e
    <strong><code><a href="reserved.constants.php#constant.stdin">STDIN</a></code></strong> não são mais fechados na destruição de resources,
    o que ocorre principalmente quando o CLI termina.
    No entanto, ainda é possível fechar explicitamente esses fluxos usando
    <span class="function"><a href="function.fclose.php" class="function">fclose()</a></span> e funções semelhantes.
   </p>
  </div>
 </div>

 <div class="sect2" id="migration83.other-changes.functions">
  <h3 class="title">Funções Alteradas</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> adicionou os seguintes 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: Tempo total de aplicação,
      em segundos (incluindo collector_time)</li>
     <li><code class="literal">&quot;collector_time&quot;</code> => float: Tempo gasto coletando ciclos,
      em segundos (incluindo destructor_time e free_time)</li>
     <li><code class="literal">&quot;destructor_time&quot;</code> => float: Tempo gasto executando destrutores durante a
      coleta de ciclos, em segundos</li>
     <li><code class="literal">&quot;free_time&quot;</code> => float: Tempo gasto liberando valores
      durante a coleta de ciclos, em segundos.</li>
    </ul>
   </p>

   <p class="para">
    <span class="function"><a href="function.class-alias.php" class="function">class_alias()</a></span>agora suporta a criação de um alias de uma
    classe interna.
   </p>

   <p class="para">
    Definir <a href="ini.core.php#ini.open-basedir" class="link">open_basedir</a> em tempo de execução
    usando <code class="code">ini_set(&#039;open_basedir&#039;, ...);</code> não aceita mais caminhos que
    contenham o diretório pai (<code class="literal">..</code>). Anteriormente,
    apenas os caminhos que começavam com <code class="literal">..</code> eram proibidos. Isso poderia
    ser facilmente contornado adicionando <code class="literal">./</code> ao início do caminho.
   </p>

   <p class="para">
    Os manipuladores de exceção do usuário agora capturam exceções durante a finalização.
   </p>

   <p class="para">
    O HTML resultante das funções <span class="function"><a href="function.highlight-string.php" class="function">highlight_string()</a></span> e
    <span class="function"><a href="function.highlight-file.php" class="function">highlight_file()</a></span> foi alterado.
    O espaço em branco entre as tags HTML externas é removido. As quebras de linha e
    espaços não são mais convertidos em entidades HTML. Todo o HTML agora é envolvido em uma tag
    <code class="literal">&lt;pre&gt;</code>. A tag <code class="literal">&lt;span&gt;</code>
    externa foi mesclada com a tag <code class="literal">&lt;code&gt;</code> .
   </p>

  </div>

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

   <p class="para">
    A função <span class="function"><a href="function.easter-date.php" class="function">easter_date()</a></span> agora suporta anos de 1970 a
    2.000.000.000 em sistemas de 64 bits, anteriormente, ela suportava apenas anos no
    intervalo de 1970 a 2037.
   </p>
  </div>

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

   <p class="para">
    A função <span class="function"><a href="function.curl-getinfo.php" class="function">curl_getinfo()</a></span> agora suporta duas novas constantes:
    <strong><code><a href="curl.constants.php#constant.curlinfo-capath">CURLINFO_CAPATH</a></code></strong> e
    <strong><code><a href="curl.constants.php#constant.curlinfo-cainfo">CURLINFO_CAINFO</a></code></strong>. Se a opção for <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, duas chaves
    adicionais são adicionadas:
    <code class="literal">&quot;capath&quot;</code> e <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">
    Alterada a tentativa de tipo de retorno de
    <span class="methodname"><a href="domcharacterdata.appenddata.php" class="methodname">DOMCharacterData::appendData()</a></span> para <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> e
    <span class="methodname"><a href="domdocument.loadxml.php" class="methodname">DOMDocument::loadXML()</a></span> agora têm um tipo de retorno
    tentativo de <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>. Anteriormente, isso estava documentado com um tipo de retorno
    de <code class="code">DOMDocument|bool</code>, mas, a partir do PHP 8.0.0,
    <span class="classname"><a href="class.domdocument.php" class="classname">DOMDocument</a></span>
    não pode mais ser retornado, pois não pode ser chamado estaticamente.
   </p>

  </div>

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

   <p class="para">
    A assinatura da função <span class="function"><a href="function.imagerotate.php" class="function">imagerotate()</a></span> foi alterada.
    O parâmetro <code class="parameter">$ignore_transparent</code> foi removido,
    pois era ignorado desde o PHP 5.5.0.
   </p>
  </div>

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

   <p class="para">
    A função <span class="function"><a href="intldateformatter.settimezone.php" class="function">datefmt_set_timezone()</a></span> (e seu alias
    <span class="methodname"><a href="intldateformatter.settimezone.php" class="methodname">IntlDateformatter::setTimeZone()</a></span>)
    agora retorna <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> em caso de sucesso, anteriormente retornava <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> agora retorna <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>
    em caso de falha, anteriormente era retornado <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    Agora retorna <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> em caso de sucesso, anteriormente era retornado <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> agora retorna um boolean.
    Anteriormente, ela retornava <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> em caso de sucesso e <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> em caso de falha.
   </p>

   <p class="para">
    O método <span class="methodname"><strong>IntlDateFormatter::construct()</strong></span> lançará uma exceção <strong><code><a href="intl.constants.php#constant.u-illegal-argument-error">U_ILLEGAL_ARGUMENT_ERROR</a></code></strong>
    quando uma localidade inválida foi definida.
   </p>
  </div>

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

   <p class="para">
    As funções <span class="function"><a href="function.mb-strtolower.php" class="function">mb_strtolower()</a></span> e <span class="function"><a href="function.mb-convert-case.php" class="function">mb_convert_case()</a></span>
    implementam regras de formatação condicional para a letra sigma grega.
    Para <span class="function"><a href="function.mb-convert-case.php" class="function">mb_convert_case()</a></span>,
    a formatação condicional se aplica apenas aos modos <strong><code><a href="mbstring.constants.php#constant.mb-case-lower">MB_CASE_LOWER</a></code></strong>
    e <strong><code><a href="mbstring.constants.php#constant.mb-case-title">MB_CASE_TITLE</a></code></strong>, não aos modos
    <strong><code><a href="mbstring.constants.php#constant.mb-case-lower-simple">MB_CASE_LOWER_SIMPLE</a></code></strong> e
    <strong><code><a href="mbstring.constants.php#constant.mb-case-title-simple">MB_CASE_TITLE_SIMPLE</a></code></strong>..
   </p>

   <p class="para">
    A função <span class="function"><a href="function.mb-decode-mimeheader.php" class="function">mb_decode_mimeheader()</a></span> interpreta os underscores em
    palavras MIME codificadas com QPrint conforme o RFC 2047; eles são
    convertidos em espaços.
    Os underscores devem ser codificados como <code class="literal">&quot;=5F&quot;</code> em tais
    palavras MIME codificadas.
   </p>

   <p class="para">
    Em casos raros, <span class="function"><a href="function.mb-encode-mimeheader.php" class="function">mb_encode_mimeheader()</a></span> codificará por transferência
    sua string de entrada, enquanto no PHP 8.2 ela seria passada como ASCII bruto.
   </p>

   <p class="para">
    A função <span class="function"><a href="function.mb-encode-mimeheader.php" class="function">mb_encode_mimeheader()</a></span> não descarta mais os bytes NUL (zero)
    ao codificar a string de entrada com QPrint.
    Isso anteriormente causava a corrupção de strings em determinadas codificações de texto, especialmente
    UTF-16 e UTF-32, ao usar mb_encode_mimeheader.
   </p>

   <p class="para">
    O modo &quot;não estrito&quot; da função <span class="function"><a href="function.mb-detect-encoding.php" class="function">mb_detect_encoding()</a></span>&#039;s agora se
    comporta conforme descrito na documentação.
    Anteriormente, retornava <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> se o mesmo byte (por exemplo, o primeiro
    byte) da string de entrada fosse inválido em todas as codificações candidatas.
    Mas geralmente, eliminava codificações candidatas da consideração quando
    um byte inválido era encontrado e, se o mesmo byte de entrada eliminasse todas
    as codificações restantes ainda em consideração, retornaria <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
    Por outro lado, se todas as codificações candidatas, exceto uma, fossem eliminadas da consideração,
    retornaria a última restante sem considerar quantos erros de codificação poderiam
    ser encontrados posteriormente na string.
    Isso difere do comportamento descrito na documentação, que diz:
    &quot;Se estrito for definido como falso, a codificação mais próxima será
    retornada.&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> agora gera um
    <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span> em vez de uma <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span>
    quando o argumento <code class="parameter">$constructor_args</code> não está vazio e a
    classe não possui um construtor.
   </p>

   <p class="para">
    <span class="function"><a href="mysqli.poll.php" class="function">mysqli_poll()</a></span> agora gera um <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span>
    quando nenhum dos argumentos <code class="parameter">$read</code>
    nem <code class="parameter">$error</code> é fornecido.
   </p>

   <p class="para">
    <span class="function"><a href="mysqli-result.field-seek.php" class="function">mysqli_field_seek()</a></span> e
    <span class="methodname"><a href="mysqli-result.field-seek.php" class="methodname">mysqli_result::field_seek()</a></span> agora especificam o
    tipo de retorno como <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> em vez 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">
    A função <span class="function"><a href="function.odbc-autocommit.php" class="function">odbc_autocommit()</a></span> agora aceita <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>
    como valor para o parâmetro <code class="parameter">$enable</code>.
    Passar <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> tem o mesmo comportamento que passar apenas 1 parâmetro,
    ou seja, indica se o recurso de autocommit está habilitado ou não.
   </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> agora gera um
    <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span> em vez de uma <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span>
    quando o argumento <code class="parameter">$constructor_args</code> não está vazio e a
    classe não possui um construtor.
   </p>

   <p class="para">
    A função <span class="function"><a href="function.pg-insert.php" class="function">pg_insert()</a></span> agora gera um <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span>
    em vez de um <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> quando a tabela especificada é inválida.
   </p>

   <p class="para">
    As funções <span class="function"><a href="function.pg-insert.php" class="function">pg_insert()</a></span> e <span class="function"><a href="function.pg-convert.php" class="function">pg_convert()</a></span> agora
    geram um <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span> ou <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>
    em vez de um <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> quando o valor/tipo de um campo
    não corresponde adequadamente ao tipo do PostgreSQL.
   </p>

   <p class="para">
    O parâmetro <code class="parameter">$row</code> das funções
    <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>, e
    <span class="function"><a href="function.pg-field-is-null.php" class="function">pg_field_is_null()</a></span> agora é opcional.
   </p>
  </div>

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

   <p class="para">
    A função <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span> e <span class="function"><a href="function.srand.php" class="function">srand()</a></span> foram
    alteradas para não verificarem o número de argumentos para determinar se uma semente (seed)
    aleatória deve ser usada. Passar <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> gerará uma semente aleatória,
    e ao passar <code class="literal">0</code>, será usado zero como a semente. As funções agora são consistentes com
    com o comportamento de <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">
    O tipo de retorno da função <span class="methodname"><a href="reflectionclass.getstaticproperties.php" class="methodname">ReflectionClass::getStaticProperties()</a></span>
    não é mais nulo.
   </p>
  </div>

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

   <p class="para">
    As mensagens de erro do tipo <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>s emitidas pela
    função <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> foram elevadas para <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> agora emite um novo <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>
    se a entrada contiver bytes não consumidos.
    
   </p>

   <p class="para">
    <span class="function"><a href="function.array-pad.php" class="function">array_pad()</a></span> agora está limitada apenas pelo número máximo de
    elementos que um array pode ter. Anteriormente, era possível adicionar no máximo 1048576
    elementos de cada vez.
   </p>

   <p class="para">
    <span class="function"><a href="function.strtok.php" class="function">strtok()</a></span> gera um <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> no caso
    em que o token não é fornecido ao iniciar a tokenização.
   </p>

   <p class="para">
    A função <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> agora encadeará a exceção subjacente
    <span class="classname"><a href="class.random-randomexception.php" class="classname">Random\RandomException</a></span>
    como a <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span> <code class="parameter">$previous</code> do tipo <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span>&#039;s
    quando a geração de salt falhar.
   </p>

   <p class="para">
    Se você estiver usando um array como o parâmetro <code class="parameter">$command</code>
    <span class="function"><a href="function.proc-open.php" class="function">proc_open()</a></span>, ele agora deve ter pelo menos um
    elemento não vazio. Caso contrário, um <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span>
    será lançado.
   </p>

   <p class="para">
    <span class="function"><a href="function.proc-open.php" class="function">proc_open()</a></span> retorna <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> se o array <code class="parameter">$command</code>
    for inválido, em vez de um objeto do tipo resource que produz um aviso posteriormente.
    Este já era o comportamento no Windows mas agora também é aplicável se uma implementação
    posix_spawn estiver em uso (maioria das plataformas Linux, BSD e MacOS). Ainda existem
    algumas plataformas antigas onde este comportamento não foi alterado já que posix_spawn não
    é suportado nelas.
   </p>

   <p class="para">
    <span class="function"><a href="function.array-sum.php" class="function">array_sum()</a></span> e <span class="function"><a href="function.array-product.php" class="function">array_product()</a></span> agora
    emitem um aviso quando os valores no array não podem ser convertidos para int ou float.
    Anteriormente, arrays e objetos eram ignorados, enquanto todos os outros valores eram
    convertidos para int. Além disso, objetos que definem uma conversão numérica (por exemplo,
    <a href="book.gmp.php" class="link">GMP</a>) agora são convertidos em vez de serem ignorados.
    
   </p>

   <p class="para">
    O parâmetro <code class="parameter">$decimals</code> da função <span class="function"><a href="function.number-format.php" class="function">number_format()</a></span>
    agora lida corretamente com números inteiros negativos.
    Arredondar com um valor negativo para <code class="parameter">$decimals</code> significa
    que <code class="parameter">$num</code> é arredondado para <code class="parameter">$decimals</code>
    dígitos significativos antes do ponto decimal.
    Anteriormente, valores negativos para <code class="parameter">$decimals</code> eram silenciosamente
    ignorados e o número era arredondado para zero casas decimais.
   </p>

   <p class="para">
    Um novo argumento <code class="parameter">$before_needle</code> foi adicionado à função
    <span class="function"><a href="function.strrchr.php" class="function">strrchr()</a></span>. Ele se comporta de forma semelhante ao seu equivalente nas
    funções <span class="function"><a href="function.strstr.php" class="function">strstr()</a></span> ou <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> e <span class="function"><a href="function.fgetcsv.php" class="function">fgetcsv()</a></span> agora retornam
    uma string vazia em vez de uma string contendo um único byte nulo para o último campo,
    que contém apenas um encapsulamento não terminado.
   </p>
  </div>

 </div>

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

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

   <p class="para">
    O uso dos operadores de <a href="language.operators.increment.php" class="link">incremento/decremento</a>
    (<code class="literal">++</code>/<code class="literal">--</code>) em valores do tipo
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> agora gera avisos.
    Isso ocorre porque atualmente não tem efeito, mas se comportará como
    <code class="code">$bool += 1</code> no futuro.
   </p>

   <p class="para">
    O uso do operador de <a href="language.operators.increment.php" class="link">decremento</a>
    (<code class="literal">--</code>) em valores do tipo <span class="type"><a href="language.types.null.php" class="type null">null</a></span> agora gera avisos.
    Isso ocorre porque atualmente não tem efeito, mas se comportará como
    <code class="code">$null -= 1</code> no futuro.
   </p>

   <p class="para">
    Objetos internos que implementam um cast _IS_NUMBER, mas não um manipulador do operador
    que sobrescreve a adição e a subtração, agora podem ser incrementados e decrementados
    como se alguém fosse fazer <code class="code">$o += 1</code> ou <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">
    O mecanismo de vida útil do DOM foi reformulado de tal forma que nós implicitamente
    removidos ainda podem ser recuperados. Anteriormente, isso resultava em uma exceção.
   </p>
  </div>

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

   <p class="para">
    A classe <span class="classname"><a href="class.sqlite3.php" class="classname">SQLite3</a></span> agora lança
    <span class="classname"><a href="class.sqlite3exception.php" class="classname">SQLite3Exception</a></span> (que estende
    <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span>) em vez de <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span>.
   </p>

   <p class="para">
    O código de erro do SQLite agora é passado no código de erro da exceção,
    em vez de ser incluído na mensagem de erro.
   </p>

  </div>
 </div>

 <div class="sect2" id="migration83.other-changes.ini">
  <h3 class="title">Mudanças no Tratamento de Arquivos INI</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     As configurações INI <code class="literal">assert.*</code> foram descontinuadas.
     Isso inclui as seguintes configurações 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>
     Se o valor da configuração for igual ao valor padrão, nenhuma notificação de
     descontinuação será emitida.
     Em vez disso, a configuração INI z<a href="ini.core.php#ini.zend.assertions" class="link">zend.assertions</a>
     deve ser usada.
    </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>
     é uma nova diretiva INI que define o tamanho máximo permitido da pilha.
     Os valores possíveis são <code class="literal">0</code> (detectar o tamanho máximo da pilha do processo ou da thread),
     <code class="literal">-1</code> (sem limite) ou um número positivo de bytes.
     O valor padrão é <code class="literal">0</code>.
     Quando não é possível detectar o tamanho máximo da pilha do processo ou da thread,
     é usado um valor padrão do sistema conhecido.
     Definir esse valor muito alto tem o mesmo efeito que desabilitar o limite de tamanho da pilha.
     Fibers usam
     <a href="info.configuration.php#ini.fiber.stack-size" class="link">fiber.stack_size</a>
     como tamanho máximo permitido da pilha.
     Um <span class="classname"><a href="class.error.php" class="classname">Error</a></span> é gerado quando a pilha de chamadas do processo ultrapassa
     <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 falhas de segmentação induzidas por estouro de pilha, com o
     objetivo de facilitar a depuração.
     O tamanho da pilha aumenta durante recursões não controladas envolvendo funções internas
     ou os 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>.
     Isso não está relacionado a estouros de buffer de pilha e não é uma medida de segurança.
    </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>
     é uma nova diretiva INI que define o tamanho reservado da pilha, em bytes.
     Esse valor é subtraído do tamanho máximo permitido da pilha,
     como um buffer, ao verificar o tamanho da pilha.
    </p>
   </li>
  </ul>
 </div>

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

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

   <p class="para">
    A iteração sobre um <span class="classname"><a href="class.domnodelist.php" class="classname">DOMNodeList</a></span> agora utiliza o cache. Portanto,
    solicitar itens não leva mais tempo quadrático por padrão.
   </p>

   <p class="para">
    Obter o conteúdo de texto de nós agora evita uma alocação, resultando
    em um ganho de desempenho.
   </p>

   <p class="para">
    <span class="methodname"><a href="domchildnode.remove.php" class="methodname">DOMChildNode::remove()</a></span>agora possui desempenho O(1),
   </p>
  </div>

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

   <p class="para">
    A verificação de erros das flags na função <span class="function"><a href="function.file.php" class="function">file()</a></span> agora é cerca de 7% mais 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> agora realiza menos operações de entrada/saída (I/O)
    ao percorrer um diretório.
   </p>
  </div>
 </div>

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