<?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.new-features.php',
    1 => 'Novos Recursos',
    2 => 'Novos Recursos',
  ),
  'up' => 
  array (
    0 => 'migration84.php',
    1 => 'Migrando do PHP 8.3.x para o PHP 8.4.x',
  ),
  'prev' => 
  array (
    0 => 'migration84.php',
    1 => 'Migrando do PHP 8.3.x para o PHP 8.4.x',
  ),
  'next' => 
  array (
    0 => 'migration84.new-classes.php',
    1 => 'Novas Classes, Enumera&ccedil;&otilde;es e Interfaces',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'appendices/migration84/new-features.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration84.new-features" class="sect1">
 <h2 class="title">Novos Recursos</h2>

 
 <div class="sect2" id="migration84.new-features.core">
  <h3 class="title">Núcleo do PHP</h3>

  
  <div class="sect3" id="migration84.new-features.core.property-hooks">
   <h4 class="title">Ganchos de Propriedades</h4>

   <p class="simpara">
    Propriedades de objetos agora podem ter uma lógica adicional associada com suas
    operações <code class="literal">get</code> e <code class="literal">set</code>.
    Dependendo do uso, isso pode ou não tornar a propriedade virtual,
    ou seja, não existe nenhum valor de apoio.
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Person<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// Uma propriedade "virtual". Não pode ser definida explicitamente.<br />    </span><span style="color: #007700">public </span><span style="color: #0000BB">string $fullName </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">get </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">firstName </span><span style="color: #007700">. </span><span style="color: #DD0000">' ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">lastName</span><span style="color: #007700">;<br />    }<br /><br />    </span><span style="color: #FF8000">// Todas as operações de escrita passam por este gancho e o resultado é o que for escrito.<br />    // Acesso de leitura ocorre normalmente.<br />    </span><span style="color: #007700">public </span><span style="color: #0000BB">string $firstName </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">set </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">ucfirst</span><span style="color: #007700">(</span><span style="color: #0000BB">strtolower</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">));<br />    }<br /><br />    </span><span style="color: #FF8000">// Todas as operações de escrita passam por este gancho, que precisa escrever no próprio valor de apoio.<br />    // Acesso de leitura ocorre normalmente.<br />    </span><span style="color: #007700">public </span><span style="color: #0000BB">string $lastName </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">set </span><span style="color: #007700">{<br />            if (</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">) &lt; </span><span style="color: #0000BB">2</span><span style="color: #007700">) {<br />                throw new </span><span style="color: #0000BB">\InvalidArgumentException</span><span style="color: #007700">(</span><span style="color: #DD0000">'Muito curto'</span><span style="color: #007700">);<br />            }<br />            </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">lastName </span><span style="color: #007700">= </span><span style="color: #0000BB">$value</span><span style="color: #007700">;<br />        }<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$p </span><span style="color: #007700">= new </span><span style="color: #0000BB">Person</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">firstName </span><span style="color: #007700">= </span><span style="color: #DD0000">'pedro'</span><span style="color: #007700">;<br />print </span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">firstName</span><span style="color: #007700">; </span><span style="color: #FF8000">// Exibe "Pedro"<br /></span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">lastName </span><span style="color: #007700">= </span><span style="color: #DD0000">'Pedroso'</span><span style="color: #007700">;<br />print </span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fullName</span><span style="color: #007700">; </span><span style="color: #FF8000">// Exibe "Pedro Pedroso"</span></span></code></div>
    </div>

   </div>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.asymmetric-property-visibility">
   <h4 class="title">Visibilidade de Propriedade Assimétrica</h4>

   <p class="simpara">
    Propriedades de objetos agora podem ter suas visibilidades <code class="literal">set</code>
    controladas separadamente das visibilidades <code class="literal">get</code>.
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Example<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// O primeiro modificador controla a visibilidade "get", e o segundo<br />    // controla a visibilidade "set". A visibilidade "get" não pode ser mais restrita que a "set".<br />    </span><span style="color: #007700">public protected(</span><span style="color: #0000BB">set</span><span style="color: #007700">) </span><span style="color: #0000BB">string $name</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">string $name</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name </span><span style="color: #007700">= </span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br />    }<br />}</span></span></code></div>
    </div>

   </div>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.lazy-objects">
   <h4 class="title">Objetos Lentos</h4>
   <p class="simpara">
    Agora é possível criar objetos cuja inicialização é adiada até
    serem acessados. Bibliotecas e estruturas podem aproveitar esses objetos lentos
    para adiar a busca de dados ou dependências necessárias para inicialização.
   </p>
<div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Example<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(private </span><span style="color: #0000BB">int $data</span><span style="color: #007700">)<br />    {<br />    }<br /><br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">$initializer </span><span style="color: #007700">= static function (</span><span style="color: #0000BB">Example $ghost</span><span style="color: #007700">): </span><span style="color: #0000BB">void </span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// Busca dados ou dependências<br />    </span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">getData</span><span style="color: #007700">();<br />    </span><span style="color: #FF8000">// Inicializa<br />    </span><span style="color: #0000BB">$ghost</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">);<br />};<br /><br /></span><span style="color: #0000BB">$reflector </span><span style="color: #007700">= new </span><span style="color: #0000BB">ReflectionClass</span><span style="color: #007700">(</span><span style="color: #0000BB">Example</span><span style="color: #007700">::class);<br /></span><span style="color: #0000BB">$object </span><span style="color: #007700">= </span><span style="color: #0000BB">$reflector</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">newLazyGhost</span><span style="color: #007700">(</span><span style="color: #0000BB">$initializer</span><span style="color: #007700">);</span></span></code></div>
    </div>

   </div>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.deprecated-attribute">
   <h4 class="title">Atributo <code class="code">#[\Deprecated]</code></h4>

   <p class="simpara">
    O novo atributo <span class="classname"><a href="class.deprecated.php" class="classname">Deprecated</a></span> pode ser usado para marcar funções, métodos
    e constantes de classe como descontinuados. O comportamento da funcionalidade descontinuada com este
    atributo corresponde ao comportamento do mecanismo de descontinuação existente para as funcionalidades
    fornecidas pelo próprio PHP. A única exceção é que o código de erro emitido é
    <strong><code><a href="errorfunc.constants.php#constant.e-user-deprecated">E_USER_DEPRECATED</a></code></strong> ao invés de <strong><code><a href="errorfunc.constants.php#constant.e-deprecated">E_DEPRECATED</a></code></strong>.
   </p>

   <p class="simpara">
    Descontinuações existentes nas funcionalidades fornecidas pelo próprio PHP foram atualizadas para usar
    o atributo, melhorando as mensagens de erro emitidas através da inclusão de uma breve explicação.
   </p>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.rfc1867">
   <h4 class="title">Analisando solicitações RFC1867 (multipartes) em solicitações HTTP não-POST</h4>

   
   <p class="simpara">
    Adicionada a função <span class="function"><a href="function.request-parse-body.php" class="function">request_parse_body()</a></span> que permite analisar
    solicitações RFC1867 (multipartes) em solicitações HTTP não-POST.
   </p>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.new-chaining">
   <h4 class="title">Encadeando expressões <a href="language.oop5.basic.php#language.oop5.basic.new" class="link"><code class="literal">new</code></a> sem parênteses</h4>

   
   <p class="simpara">
    Novas expressões com argumentos de construtor agora são desreferenciáveis, o que significa que
    permitem encadear chamadas de métodos, acessos a propriedades etc., sem colocar
    a expressão entre parênteses.
   </p>
  </div>

  <div class="sect3" id="migration84.new-features.core.debug-weakref">
   <h4 class="title">Informação de Depuração Melhorada para <span class="classname"><a href="class.weakreference.php" class="classname">WeakReference</a></span></h4>

   
   <p class="simpara">
    A obtenção de informação de depuração para a classe <span class="classname"><a href="class.weakreference.php" class="classname">WeakReference</a></span> agora
    também conterá o objeto referenciado, ou <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> se a referência não
    for mais válida.
   </p>
  </div>

  <div class="sect3" id="migration84.new-features.core.debug-closure">
   <h4 class="title">Informação de Depuração Melhorada para <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span></h4>

   
   <p class="simpara">
    A saída do método <span class="methodname"><strong>Closure::__debugInfo()</strong></span> agora inclui
    o nome, o arquivo e a linha do <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span>.
   </p>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.multiple-namespaces-symbols">
   <h4 class="title">Definindo Símbolos Idênticos em Diferentes Blocos de Espaços de Nomes</h4>

   
   <p class="simpara">
    Sair de um espaço de nomes agora limpa os símbolos visíveis.
    Isso permite usar um símbolo em um bloco de espaço de nomes, mesmo que um
    bloco de espaço de nomes anterior tenha declarado um símbolo com o mesmo nome.
    
   </p>
  </div>

 </div>

 <div class="sect2" id="migration84.new-features.curl">
  <h3 class="title">cURL</h3>

  <p class="simpara">
   <span class="function"><a href="function.curl-version.php" class="function">curl_version()</a></span> retorna um valor
   <code class="literal">feature_list</code> adicional, que é um array associativo
   de todos os recursos cURL conhecidos, e se eles são suportados (<strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>)
   ou não (<strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>).
  </p>

  <p class="simpara">
   Adicionadas as constantes <strong><code><a href="curl.constants.php#constant.curl-http-version-3">CURL_HTTP_VERSION_3</a></code></strong> e
   <strong><code><a href="curl.constants.php#constant.curl-http-version-3only">CURL_HTTP_VERSION_3ONLY</a></code></strong> (disponíveis
   desde a libcurl 7.66 e 7.88) como opções possíveis para
   <strong><code><a href="curl.constants.php#constant.curlopt-http-version">CURLOPT_HTTP_VERSION</a></code></strong>.
  </p>

  <p class="simpara">
   Adicionada a constante <strong><code><a href="curl.constants.php#constant.curlopt-prereqfunction">CURLOPT_PREREQFUNCTION</a></code></strong> como uma opção do cURL que
   aceita um <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> para ser chamado depois que a conexão tenha sido feita,
   mas antes que a requisição seja enviada.
   Esta chamável precisa retornar <strong><code><a href="curl.constants.php#constant.curl-prereqfunc-ok">CURL_PREREQFUNC_OK</a></code></strong> ou
   <strong><code><a href="curl.constants.php#constant.curl-prereqfunc-abort">CURL_PREREQFUNC_ABORT</a></code></strong> para permitir ou abortar a requisição.
  </p>

  <p class="simpara">
   Adicionada a constante <strong><code><a href="curl.constants.php#constant.curlopt-server-response-timeout">CURLOPT_SERVER_RESPONSE_TIMEOUT</a></code></strong>,
   que era anteriormente conhecida como <strong><code><a href="curl.constants.php#constant.curlopt-ftp-response-timeout">CURLOPT_FTP_RESPONSE_TIMEOUT</a></code></strong>.
   Ambas as constantes contêm o mesmo valor.
  </p>

  <p class="para">
   Adicionada a constante <strong><code><a href="curl.constants.php#constant.curlopt-debugfunction">CURLOPT_DEBUGFUNCTION</a></code></strong> como uma opção do cURL que
   aceita um <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> que é chamado durante o tempo de vida da requisição
   com o objeto <span class="classname"><a href="class.curlhandle.php" class="classname">CurlHandle</a></span>,
   um inteiro contendo o tipo da mensagem de depuração, e uma string contendo a
   mensagem de depuração.
   O tipo da mensagem de depuração é uma das seguintes constantes:
   <ul class="simplelist">
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-text">CURLINFO_TEXT</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-header-in">CURLINFO_HEADER_IN</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-header-out">CURLINFO_HEADER_OUT</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-data-in">CURLINFO_DATA_IN</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-data-out">CURLINFO_DATA_OUT</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-ssl-data-in">CURLINFO_SSL_DATA_IN</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-ssl-data-out">CURLINFO_SSL_DATA_OUT</a></code></strong></li>
   </ul>
   Uma vez que esta opção é definida, <strong><code><a href="curl.constants.php#constant.curlinfo-header-out">CURLINFO_HEADER_OUT</a></code></strong>
   não pode ser definida porque ela usa a mesma funcionalidade da libcurl.
  </p>

  <p class="simpara">
   A função <span class="function"><a href="function.curl-getinfo.php" class="function">curl_getinfo()</a></span> agora retorna uma chave adicional
   <code class="literal">posttransfer_time_us</code>, contendo o número de
   microssegundos desde o início até o último byte ser enviado.
   Quando um redirecionamento é seguido, o tempo de cada requisição é adicionado cumulativamente.
   Este valor também pode ser recuperado passando
   <strong><code><a href="curl.constants.php#constant.curlinfo-posttransfer-time-t">CURLINFO_POSTTRANSFER_TIME_T</a></code></strong> para o parâmetro
   <code class="parameter">option</code> da função <span class="function"><a href="function.curl-getinfo.php" class="function">curl_getinfo()</a></span>.
   Requer libcurl 8.10.0 ou posterior.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.dom">
  <h3 class="title">DOM</h3>

  
  
  <p class="simpara">
   Adicionado o espaço de nomes <span class="package">Dom</span> com novas classes como contrapartes
   às classes DOM existentes (ex.: <span class="classname"><a href="class.dom-node.php" class="classname">Dom\Node</a></span> é a nova
   <span class="classname"><a href="class.domnode.php" class="classname">DOMNode</a></span>).
   Estas classes são compatíveis com HTML 5 e cumprem as especificações WHATWG;
   resolvendo problemas antigos na extensão DOM.
   As classes DOM antigas continuam disponíveis para compatibilidade com versões anteriores.
  </p>

  <p class="para">
   Adicionado o método <span class="methodname"><a href="domnode.comparedocumentposition.php" class="methodname">DOMNode::compareDocumentPosition()</a></span>
   com suas constantes associadas:
   <ul class="simplelist">
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-disconnected">DOMNode::DOCUMENT_POSITION_DISCONNECTED</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-preceding">DOMNode::DOCUMENT_POSITION_PRECEDING</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-following">DOMNode::DOCUMENT_POSITION_FOLLOWING</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-contains">DOMNode::DOCUMENT_POSITION_CONTAINS</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-contained-by">DOMNode::DOCUMENT_POSITION_CONTAINED_BY</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-implementation-specific">DOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC</a></code></strong></li>
   </ul>
  </p>

  
  <p class="simpara">
   Agora é possível passar qualquer chamável para
   <span class="methodname"><a href="domxpath.registerphpfunctions.php" class="methodname">DOMXPath::registerPhpFunctions()</a></span>.

   Além disso, com <span class="methodname"><a href="domxpath.registerphpfunctionns.php" class="methodname">DOMXPath::registerPhpFunctionNs()</a></span>,
   agora podem ser registradas funções de retorno que usarão sintaxe de chamada de função nativa
   em vez de usar <code class="code">php:function(&#039;name&#039;)</code>.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.intl">
  <h3 class="title">Intl</h3>

  <p class="simpara">
   Adicionada a constante <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-halfodd">NumberFormatter::ROUND_HALFODD</a></code></strong> para
   complementar a funcionalidade existente da constante
   <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-halfeven">NumberFormatter::ROUND_HALFEVEN</a></code></strong>.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.openssl">
  <h3 class="title">OpenSSL</h3>

  <p class="simpara">
   Adicionado suporte para chaves baseadas em Curve25519 + Curve448.
   Especificamente, os campos x25519, ed25519, x448 e ed448 são suportados em
   <span class="function"><a href="function.openssl-pkey-new.php" class="function">openssl_pkey_new()</a></span>,
   <span class="function"><a href="function.openssl-pkey-get-details.php" class="function">openssl_pkey_get_details()</a></span> e
   <span class="function"><a href="function.openssl-sign.php" class="function">openssl_sign()</a></span> e
   <span class="function"><a href="function.openssl-verify.php" class="function">openssl_verify()</a></span> foi estendida para suportar essas chaves.
  </p>

  <p class="simpara">
   Implementado o hash de senha PASSWORD_ARGON2.
   Requer OpenSSL 3.2 e compilação NTS do PHP.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pcre">
  <h3 class="title">PCRE</h3>

  <p class="simpara">
   A biblioteca integrada pcre2lib foi atualizada para a versão 10.44.
   Como consequência, o suporte a LoongArch JIT foi adicionado, espaços
   agora são permitidos entre chaves em itens compatíveis com Perl, e
   afirmações retroativas de comprimento variável agora são suportadas.
  </p>

  <p class="simpara">
   Com a biblioteca pcre2lib versão 10.44, o comprimento máximo de grupos de captura nomeados
   foi alterado de <code class="literal">32</code> para <code class="literal">128</code>.
  </p>

  <p class="simpara">
   Adicionado suporte para o modificador <code class="literal">r</code> (PCRE2_EXTRA_CASELESS_RESTRICT),
   e também para o modificador de modo <code class="literal">(?r)</code>.
   Quando habilitados juntos com o modificador de insensibilidade a maiúsculas/minúsculas (<code class="literal">i</code>),
   a expressão bloqueia a mistura de caracteres ASCII e não ASCII.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo">
  <h3 class="title">PDO</h3>

  
  <p class="simpara">
   Adicionado suporte para subclasses de drivers específicos para suportar melhor
   as funcionalidades específicas de cada banco de dados.
   As novas classes são instanciáveis tanto pela chamada ao método
   <span class="methodname"><a href="pdo.connect.php" class="methodname">PDO::connect()</a></span> quanto pela instanciação direta
   de uma das subclasses específicas do driver.
  </p>

  
  <p class="para">
   Adicionado suporte para analisadores SQL específicos de drivers.
   Quando um analisador específico do driver não está disponível, o analisador padrão é usado.
   Os analisador padrão suporta:
   <ul class="simplelist">
    <li>
     literais com aspas simples e duplas, com a duplicação como um mecanismo de escape
    </li>
    <li>
     comentários no estilo C não aninhados e comentários de dois hífens
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo-mysql">
  <h3 class="title">PDO_MYSQL</h3>

  
  <p class="para">
   Adicionado suporte a analisador personalizado:
   <ul class="simplelist">
    <li>
     literais com aspas simples e duplas, com a duplicação e a barra invertida como mecanismos
     de escape
    </li>
    <li>
     identificadores de literais com acento grave (`), com a duplicação como mecanismo de escape
    </li>
    <li>
     comentários de dois hífens seguidos por pelo menos 1 espaço, comentários no estilo C não aninhados,
     e comentários hash
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo-pgsql">
  <h3 class="title">PDO_PGSQL</h3>

  
  <p class="para">
   Adicionado suporte a analisador personalizado:
   <ul class="simplelist">
    <li>
     literais com aspas simples e duplas, com a duplicação como mecanismo de escape
    </li>
    <li>
     strings literais de "escape" no estilo C (<code class="literal">E&#039;string&#039;</code>)
    </li>
    <li>
     strings literais envolvidos por cifrão
    </li>
    <li>
     comentários com dois hífens e no estilo C (não aninhados)
    </li>
    <li>
     suporte para <code class="literal">??</code> como sequência de escape para o
     operador <code class="literal">?</code>
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo-sqlite">
  <h3 class="title">PDO_SQLITE</h3>

  
  <p class="para">
   Adicionado suporte a analisador personalizado:
   <ul class="simplelist">
    <li>
     literais com aspas simples (''), aspas duplas (""), e acentos graves (``), com a duplicação como
     mecanismo de escape
    </li>
    <li>
     marcação com colchetes para identificadores
    </li>
    <li>
     comentários de dois hífens e comentários no estilo C (não aninhados)
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.phar">
  <h3 class="title">Phar</h3>

  <p class="simpara">
   Adicionado suporte para a extensão de timestamp Unix para arquivos Zip.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.readline">
  <h3 class="title">Readline</h3>

  <p class="simpara">
   Adicionada a capacidade de alteração do caminho de <code class="literal">.php_history</code> através
   da variável de ambiente <var class="envar">PHP_HISTFILE</var>.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.reflection">
  <h3 class="title">Reflection</h3>

  <p class="simpara">
   <span class="classname"><a href="class.reflectionattribute.php" class="classname">ReflectionAttribute</a></span> agora contém uma
   propriedade <span class="property">name</span> para melhorar a experiência de depuração.
  </p>

  <p class="simpara">
   <span class="methodname"><a href="reflectionclassconstant.tostring.php" class="methodname">ReflectionClassConstant::__toString()</a></span> e
   <span class="methodname"><a href="reflectionproperty.tostring.php" class="methodname">ReflectionProperty::__toString()</a></span> agora retornam os
   comentários do documento anexado.
  </p>

  
  <p class="para">
   Vários novos métodos e constantes relacionados com a funcionalidade de objetos lentos
   foram adicionados:

   <ul class="simplelist">
    <li>
     <span class="methodname"><a href="reflectionclass.newlazyghost.php" class="methodname">ReflectionClass::newLazyGhost()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.newlazyproxy.php" class="methodname">ReflectionClass::newLazyProxy()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.resetaslazyghost.php" class="methodname">ReflectionClass::resetAsLazyGhost()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.resetaslazyproxy.php" class="methodname">ReflectionClass::resetAsLazyProxy()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.isuninitializedlazyobject.php" class="methodname">ReflectionClass::isUninitializedLazyObject()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.initializelazyobject.php" class="methodname">ReflectionClass::initializeLazyObject()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.marklazyobjectasinitialized.php" class="methodname">ReflectionClass::markLazyObjectAsInitialized()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.getlazyinitializer.php" class="methodname">ReflectionClass::getLazyInitializer()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionproperty.skiplazyinitialization.php" class="methodname">ReflectionProperty::skipLazyInitialization()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionproperty.setrawvaluewithoutlazyinitialization.php" class="methodname">ReflectionProperty::setRawValueWithoutLazyInitialization()</a></span>
    </li>
    <li>
     <strong><code><a href="class.reflectionclass.php#reflectionclass.constants.skip-initialization-on-serialize">ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE</a></code></strong>
    </li>
    <li>
     <strong><code><a href="class.reflectionclass.php#reflectionclass.constants.skip-destructor">ReflectionClass::SKIP_DESTRUCTOR</a></code></strong>
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.soap">
  <h3 class="title">SOAP</h3>

  <p class="simpara">
   Adicionado suporte para notação Clark para espaços de nomes no mapa de classes.
   Agora é possível especificar entradas em um mapa de classes com notação Clark
   para resolver um tipo com um espaço de nomes específico para uma classe específica.
   Por exemplo: <code class="code">&#039;{http://example.com}foo&#039; =&gt; &#039;FooClass&#039;</code>.
  </p>

  <p class="simpara">
   Instâncias de <span class="interfacename"><a href="class.datetimeinterface.php" class="interfacename">DateTimeInterface</a></span> que são
   passadas para <code class="literal">xsd:datetime</code> ou elementos similares agora são
   serializadas como tais ao invés de serem serializadas como uma string vazia.
  </p>

  <p class="simpara">
   A persistência de sessão agora funciona com um módulo de sessão compartilhada.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.standard">
  <h3 class="title">Standard</h3>

  
  <p class="simpara">
   
   Adicionada uma nova enumeração <span class="classname"><a href="enum.roundingmode.php" class="classname">RoundingMode</a></span> com nome mais claros
   e capacidade de descoberta melhorada quando comparada com as
   constantes <strong><code><a href="math.constants.php#constant.php-round-half-up">PHP_ROUND_<span class="replaceable">*</span></a></code></strong>.
   Mais ainda, quatro novos modes de arredondamento foram adicionados, que estão disponíveis somente
   através da nova enumeração <span class="classname"><a href="enum.roundingmode.php" class="classname">RoundingMode</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.xsl">
  <h3 class="title">XSL</h3>

  <p class="simpara">
   Agora é possível usar parâmetros que contenham tanto aspas simples quanto aspas
   duplas.
  </p>

  
  <p class="simpara">
   Agora é possível passar qualquer chamável para o método
   <span class="methodname"><a href="xsltprocessor.registerphpfunctions.php" class="methodname">XSLTProcessor::registerPhpFunctions()</a></span>.
   
  </p>

  <p class="simpara">
   Adicionada as propriedades <span class="property"><a href="class.xsltprocessor.php#xsltprocessor.props.maxtemplatedepth">XSLTProcessor::$maxTemplateDepth</a></span> e
   <span class="property"><a href="class.xsltprocessor.php#xsltprocessor.props.maxtemplatevars">XSLTProcessor::$maxTemplateVars</a></span>
   para controlar a profundidade de recursão da avaliação de modelo XSL.
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.zip">
  <h3 class="title">Zip</h3>

  <p class="simpara">
   Adicionada a constante <strong><code><a href="zip.constants.php#ziparchive.constants.er-truncated-zip">ZipArchive::ER_TRUNCATED_ZIP</a></code></strong>,
   que foi adicionada na libzip 1.11.
  </p>
 </div>

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