<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration82.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'migration82.incompatible.php',
    1 => 'Altera&ccedil;&otilde;es incompat&iacute;veis com vers&otilde;es anteriores',
    2 => 'Altera&ccedil;&otilde;es incompat&iacute;veis com vers&otilde;es anteriores',
  ),
  'up' => 
  array (
    0 => 'migration82.php',
    1 => 'Migrando do PHP 8.1.x para o PHP 8.2.x',
  ),
  'prev' => 
  array (
    0 => 'migration82.constants.php',
    1 => 'Novas Constantes Globais',
  ),
  'next' => 
  array (
    0 => 'migration82.deprecated.php',
    1 => 'Funcionalidades Descontinuadas',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'appendices/migration82/incompatible.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration82.incompatible" class="sect1">
 <h2 class="title">Alterações incompatíveis com versões anteriores</h2>

 <div class="sect2" id="migration82.incompatible.date">
  <h3 class="title">Data</h3>

  <p class="para">
   <span class="methodname"><a href="datetime.createfromimmutable.php" class="methodname">DateTime::createFromImmutable()</a></span> agora possui um
   tipo de retorno provisório <span class="type">static</span>, que anteriormente era <span class="type"><a href="class.datetime.php" class="type DateTime">DateTime</a></span>.
  </p>

  <p class="para">
   <span class="methodname"><a href="datetimeimmutable.createfrommutable.php" class="methodname">DateTimeImmutable::createFromMutable()</a></span> agora possui um
   tipo de retorno provisório <span class="type">static</span>, que anteriormente era <span class="type"><a href="class.datetimeimmutable.php" class="type DateTimeImmutable">DateTimeImmutable</a></span>.
  </p>

  <p class="para">
   <code class="literal">number</code> em <a href="datetime.formats.php#datetime.formats.relative" class="link">relative formats</a>
   não mais aceita números com mais de um sinal, por exemplo <code class="literal">+-2</code>.
  </p>
 </div>

 <div class="sect2" id="migration82.incompatible.odbc">
  <h3 class="title">ODBC</h3>

  <p class="para">
   Agora a extensão ODBC escapa o nome de usuário e a senha quando
   ambos uma string de conexão e nome de usuário/senha são fornecidos e a string
   precisa ser acrescentada. Antes, valores dados pelo usuário contendo valores que necessitassem ser escapados
   poderiam criar uma string de conexão malformada ou injetar valores a partir de
   dados providos pelo usuário. As regras de escape devem ser idênticas às do
   comportamento do DbConnectionOptions do .NET BCL.
  </p>
 </div>

 <div class="sect2" id="migration82.incompatible.pdo-odbc">
  <h3 class="title">PDO_ODBC</h3>

  <p class="para">
   A extensão PDO_ODBC também escapa o nome de usuário e senha quando uma
   string de conexão é fornecida. Veja a <a href="migration82.incompatible.php#migration82.incompatible.odbc" class="link">mudança na extensão ODBC</a> para
   mais informações.
  </p>
 </div>

 <div class="sect2" id="migration82.incompatible.standard">
  <h3 class="title">Biblioteca Padrão</h3>

  <p class="para">
   <span class="function"><a href="function.glob.php" class="function">glob()</a></span> agora devolve um <span class="type"><a href="language.types.array.php" class="type array">array</a></span> vazio se todos os caminhos forem
   restringidos por <a href="ini.core.php#ini.open-basedir" class="link">open_basedir</a>.
   Anteriormente, o valor devolvido era <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
   Além disso, agora um aviso é emitido mesmo quando apenas alguns caminhos sejam restringidos por
   <a href="ini.core.php#ini.open-basedir" class="link">open_basedir</a>.
  </p>

  <p class="para">
   <span class="methodname"><a href="filesystemiterator.construct.php" class="methodname">FilesystemIterator::__construct()</a></span>: anteriormente ao PHP 8.2.0,
   <strong><code><a href="class.filesystemiterator.php#filesystemiterator.constants.skip-dots">FilesystemIterator::SKIP_DOTS</a></code></strong> sempre estava ativa e
   não podia ser desativada. Para manter a preservar o comportamento anterior, a constante
   deve ser informada explicitamente quanto utilizando o parâmetro <code class="parameter">flags</code>.
   O valor padrão de <code class="parameter">flags</code>
   não foi modificado.
  </p>

  <p class="para">
   <span class="function"><a href="function.strtolower.php" class="function">strtolower()</a></span>,
   <span class="function"><a href="function.strtoupper.php" class="function">strtoupper()</a></span>,
   <span class="function"><a href="function.stristr.php" class="function">stristr()</a></span>,
   <span class="function"><a href="function.stripos.php" class="function">stripos()</a></span>,
   <span class="function"><a href="function.strripos.php" class="function">strripos()</a></span>,
   <span class="function"><a href="function.lcfirst.php" class="function">lcfirst()</a></span>,
   <span class="function"><a href="function.ucfirst.php" class="function">ucfirst()</a></span>,
   <span class="function"><a href="function.ucwords.php" class="function">ucwords()</a></span>,
   e <span class="function"><a href="function.str-ireplace.php" class="function">str_ireplace()</a></span> não são mais sensíveis à localização.
   Elas agora realizam conversão de caixa em ASCII, como se a localização fosse &quot;C&quot;.
   Versões localizadas dessas funções estão disponíveis na <a href="book.mbstring.php" class="link"> extensão MBString</a>.
   Além disso, <span class="function"><a href="function.array-change-key-case.php" class="function">array_change_key_case()</a></span> e ordenações com
   <strong><code><a href="array.constants.php#constant.sort-flag-case">SORT_FLAG_CASE</a></code></strong> agora também usam conversão de caixa em ASCII.
  </p>

  <p class="para">
   <span class="function"><a href="function.str-split.php" class="function">str_split()</a></span> agora devolve um <span class="type"><a href="language.types.array.php" class="type array">array</a></span> vazio para uma <span class="type"><a href="language.types.string.php" class="type string">string</a></span> vazia.
   Anteriormente era devolvido um array com uma única string vazia como elemento.
   <span class="function"><a href="function.mb-str-split.php" class="function">mb_str_split()</a></span> não é afetada por essa mudança, visto que tal função
   já se comportava dessa maneira.
  </p>

  <p class="para">
   <span class="function"><a href="function.ksort.php" class="function">ksort()</a></span> e <span class="function"><a href="function.krsort.php" class="function">krsort()</a></span> agora fazem comparação de string
   numérica sob <strong><code><a href="array.constants.php#constant.sort-regular">SORT_REGULAR</a></code></strong> utilizando as regras de PHP 8 padrão.
  </p>

  <p class="para">
   <span class="function"><a href="function.var-export.php" class="function">var_export()</a></span> deixou de omitir a contrabarra final em classes exportadas,
   ou seja, agora os nomes de classes estarão completamente qualificados.
  </p>
 </div>

 <div class="sect2" id="migration82.incompatible.spl">
  <h3 class="title">Biblioteca Padrão do PHP (SPL)</h3>

  <p class="para">
   Agora os seguintes métodos obrigam sua assinatura:
   <ul class="simplelist">
    <li><span class="methodname"><strong>SplFileInfo::_bad_state_ex()</strong></span></li>
    <li><span class="methodname"><a href="splfileobject.getcsvcontrol.php" class="methodname">SplFileObject::getCsvControl()</a></span></li>
    <li><span class="methodname"><a href="splfileobject.fflush.php" class="methodname">SplFileObject::fflush()</a></span></li>
    <li><span class="methodname"><a href="splfileobject.ftell.php" class="methodname">SplFileObject::ftell()</a></span></li>
    <li><span class="methodname"><a href="splfileobject.fgetc.php" class="methodname">SplFileObject::fgetc()</a></span></li>
    <li><span class="methodname"><a href="splfileobject.fpassthru.php" class="methodname">SplFileObject::fpassthru()</a></span></li>
   </ul>
  </p>

  <p class="para">
   <span class="methodname"><a href="splfileobject.haschildren.php" class="methodname">SplFileObject::hasChildren()</a></span> agora possui um
   tipo de retorno provisório <span class="type"><a href="language.types.singleton.php" class="type false">false</a></span>, que anteriormente era <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
  </p>

  <p class="para">
   <span class="methodname"><a href="splfileobject.getchildren.php" class="methodname">SplFileObject::getChildren()</a></span> agora possui um
   tipo de retorno provisório <span class="type"><a href="language.types.null.php" class="type null">null</a></span>, que anteriormente era
   <span class="type">?</span><span class="type"><span class="type"><a href="class.recursiveiterator.php" class="type RecursiveIterator">RecursiveIterator</a></span><span class="type"></span></span>.
  </p>

  <p class="para">
   <span class="classname"><a href="class.globiterator.php" class="classname">GlobIterator</a></span> agora devolve um <span class="type"><a href="language.types.array.php" class="type array">array</a></span> vazio se todos os
   caminhos forem restringidos por <a href="ini.core.php#ini.open-basedir" class="link">open_basedir</a>.
   Anteriormente o valor devolvido era <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
   Além disso, agora um aviso é emitido mesmo quando apenas alguns caminhos sejam restringidos por
   <a href="ini.core.php#ini.open-basedir" class="link">open_basedir</a>.
  </p>
 </div>

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