<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration71.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'migration71.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 => 'migration71.php',
    1 => 'Migrando do PHP 7.0.x para o PHP 7.1.x',
  ),
  'prev' => 
  array (
    0 => 'migration71.constants.php',
    1 => 'Novas constantes globais',
  ),
  'next' => 
  array (
    0 => 'migration71.deprecated.php',
    1 => 'Funcionalidades descontinuadas no PHP 7.1.x',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'appendices/migration71/incompatible.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

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

 <div class="sect2" id="migration71.incompatible.too-few-arguments-exception">
  <h3 class="title">Lançamento de exceção ao passar menos argumentos do que uma função espera</h3>

  <p class="para">
   Anteriormente, um alerta seria emitido ao chamar funções definidas pelo usuário
   com parâmetros insuficientes. Agora, este alerta foi promovido a uma exceção da
   classe Error. Esta alteração aplica-se somente a funções definidas pelo usuário, e não
   a funções internas. Por exemplo:
  </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">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">){}<br /></span><span style="color: #0000BB">test</span><span style="color: #007700">();</span></span></code></div>
   </div>

   <p class="para">O exemplo acima produzirá
algo semelhante a:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), 0 passed in %s on line %d and exactly 1 expected in %s:%d
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.forbid-dynamic-calls-to-scope-introspection-functions">
  <h3 class="title">Proibição de chamadas dinâmicas de funções de introspecção de escopo</h3>

  <p class="para">
   Chamadas dinâmicas para certas funções estão proibidas (na forma de
   <code class="literal">$func()</code> ou <code class="literal">array_map(&#039;extract&#039;, ...)</code>,
   etc). Estas funções inspecionam ou modificam outro escopo, e apresentam
   comportamento ambíguo e não confiável. Estas funções são as seguintes:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.assert.php" class="function">assert()</a></span> - com uma string como o primeiro argumento
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.compact.php" class="function">compact()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.extract.php" class="function">extract()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-get-args.php" class="function">func_get_args()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-get-arg.php" class="function">func_get_arg()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-num-args.php" class="function">func_num_args()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.get-defined-vars.php" class="function">get_defined_vars()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.mb-parse-str.php" class="function">mb_parse_str()</a></span> - com um argumento
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.parse-str.php" class="function">parse_str()</a></span> - com um argumento
    </span>
   </li>
  </ul>

  <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">(function () {<br />    </span><span style="color: #0000BB">$func </span><span style="color: #007700">= </span><span style="color: #DD0000">'func_num_args'</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$func</span><span style="color: #007700">();<br />})();</span></span></code></div>
   </div>

   <p class="para">O exemplo acima produzirá:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Warning: Cannot call func_num_args() dynamically in %s on line %d
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.invalid-class-names">
  <h3 class="title">Nomes inválidos de class, interface e trait</h3>

  <p class="para">
   Os nomes a seguir não podem ser usados para dar nome a classes, interfaces ou traits:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara"><span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span></span>
   </li>
   <li class="listitem">
    <span class="simpara"><span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span></span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration71.incompatible.numerical-strings-scientific-notation">
  <h3 class="title">Conversão de string numérica agora respeita notação científica</h3>

  <p class="para">
   Operações de números inteiros e conversões de strings numéricas agora respeitam
   a notação científica. Isto também inclui a operação de conversão <code class="literal">(int)</code>,
   e as seguintes funções: <span class="function"><a href="function.intval.php" class="function">intval()</a></span> (onde
   a base é 10), <span class="function"><a href="function.settype.php" class="function">settype()</a></span>, <span class="function"><a href="function.decbin.php" class="function">decbin()</a></span>,
   <span class="function"><a href="function.decoct.php" class="function">decoct()</a></span> e <span class="function"><a href="function.dechex.php" class="function">dechex()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.fixes-to-mt_rand-algorithm">
  <h3 class="title">Correções ao algoritmo da função <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span></h3>

  <p class="para">
   <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> agora usa por padrão a versão fixa do
   algoritmo Mersenne Twister. Se existe dependência de uma saída determinística de
   <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span>,
   <strong><code><a href="random.constants.php#constant.mt-rand-php">MT_RAND_PHP</a></code></strong> pode ser usada como segundo parâmetro opcional
   para que <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span> preserve a implementação antiga
   (incorreta).
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.rand-srand-aliases">
  <h3 class="title">
   <span class="function"><a href="function.rand.php" class="function">rand()</a></span> sinônimo de <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> e
   <span class="function"><a href="function.srand.php" class="function">srand()</a></span> sinônimo de <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span>
  </h3>

  <p class="para">
   <span class="function"><a href="function.rand.php" class="function">rand()</a></span> e <span class="function"><a href="function.srand.php" class="function">srand()</a></span> agora são sinônimos
   para <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> e <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span>,
   respectivamente. Isto significa que a saída das funções a seguir foi
   alterada: <span class="function"><a href="function.rand.php" class="function">rand()</a></span>, <span class="function"><a href="function.shuffle.php" class="function">shuffle()</a></span>,
   <span class="function"><a href="function.str-shuffle.php" class="function">str_shuffle()</a></span> e <span class="function"><a href="function.array-rand.php" class="function">array_rand()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.delete-control-character-in-identifiers">
  <h3 class="title">Não permitir o caractere de controle &#039;delete&#039; ASCII em identificadores</h3>

  <p class="para">
   O caractere de controle ASCII &#039;DEL&#039; (<code class="literal">0x7F</code>) não pode mais
   ser usado em identificadores que não estejam entre aspas.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.error_log-syslog">
  <h3 class="title">
   Alterações em <code class="parameter">error_log</code> com o valor
   <code class="literal">syslog</code>
  </h3>

  <p class="para">
   Se a configuração ini <code class="parameter">error_log</code> for definida para
   <code class="literal">syslog</code>, os níveis de erro do PHP são mapeados para os níveis
   de erro dos registros do sistema. Isto traz uma diferenciação mais fina nos registros de erros
   ao contrário da abordagem anterior onde todos os erros eram registrados somente com o
   nível de erro de aviso.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.dont-call-destructors">
  <h3 class="title">Destruidores não são mais chamados em objetos incompletos</h3>

  <p class="para">
   Destruidores agora não são mais chamados para objetos que lançam uma exceção durante a
   execução do seu construtor. Em versões anteriores, este comportamento
   dependia se o objeto era referenciado fora do construtor (ex.:
   por um rastreamento de exceção).
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.call_user_func-with-ref-args">
  <h3 class="title">
   <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> lidando com argumentos por referência
  </h3>

  <p class="para">
   <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> agora sempre irá gerar um alerta
   em chamadas a funções que esperam referências como argumentos. Anteriormente
   isto dependia se a chamada era totalmente qualificada.
  </p>
  <p class="para">
   Adicionalmente, <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> e
   <span class="function"><a href="function.call-user-func-array.php" class="function">call_user_func_array()</a></span> não mais irão abortar a chamada à
   função neste caso. O alerta de &quot;referência esperada&quot; será emitido, mas a chamada
   irá proceder normalmente.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.empty-string-index-operator">
  <h3 class="title">
   O operador de índice vazio não é mais suportado para strings
  </h3>

  <p class="para">
   Aplicar o operador de índice vazio para uma string (ex.: <code class="literal">$str[] = $x</code>)
   lança um erro fatal ao invés de converter a string silenciosamente para um array.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.empty-string-modifcation-by-character">
  <h3 class="title">Atribuição via acesso ao índice de string em uma string vazia</h3>
  <p class="para">
   Modificação de string por caractere em uma string vazia agora funciona como para strings
   não vazias, isto é, escrever em um deslocamento fora dos limites preenche a string com espaços à esquerda,
   onde tipos não inteiros são convertidos para inteiros, e apenas o primeiro caractere da
   string atribuída é usado. Anteriormente, strings vazias eram silenciosamente tratadas como
   um array vazio.
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #0000BB">10</span><span style="color: #007700">] = </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <p class="para">Saída do exemplo acima no PHP 7.0:</p>
    <div class="example-contents screen">
<div class="cdata"><pre>
array(1) {
  [10]=&gt;
  string(3) &quot;foo&quot;
}
</pre></div>
    </div>
    <p class="para">Saída do exemplo acima no PHP 7.1:</p>
    <div class="example-contents screen">
<div class="cdata"><pre>
string(11) &quot;          f&quot;
</pre></div>
    </div>
   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.removed-ini-directives">
  <h3 class="title">Diretivas ini removidas</h3>

  <p class="para">
   As seguintes diretivas ini foram removidas:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.entropy_file</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.entropy_length</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.hash_function</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.hash_bits_per_character</code>
    </span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration71.incompatible.array-order">
  <h3 class="title">
   Alterado o ordenamento de array quando elementos são criados automaticamente durante atribuições
   por referência
  </h3>

  <p class="para">
   A ordem dos elementos em um array foi alterada quando esses elementos tiverem
   sido criados automaticamente através de uma atribuição por referência.
   Por exemplo:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= [];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"a"</span><span style="color: #007700">] =&amp; </span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"b"</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"b"</span><span style="color: #007700">] = </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <p class="para">Saída do exemplo acima no PHP 7.0:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [&quot;a&quot;]=&gt;
  &amp;int(1)
  [&quot;b&quot;]=&gt;
  &amp;int(1)
}
</pre></div>
   </div>
   <p class="para">Saída do exemplo acima no PHP 7.1:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [&quot;b&quot;]=&gt;
  &amp;int(1)
  [&quot;a&quot;]=&gt;
  &amp;int(1)
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.sort-order">
  <h3 class="title">Ordenação de elementos iguais</h3>
  <p class="para">
   O algoritmo interno de ordenação foi melhorado, o que pode resultar
   em uma ordem diferente de elementos, que se comparam como iguais.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Não deve-se confiar na ordem dos elementos que se comparam como iguais; ela pode
    mudar a qualquer momento.
   </p>
  </p></blockquote>
 </div>

 <div class="sect2" id="migration71.incompatible.e-recoverable">
  <h3 class="title">Mensagem de erros do tipo E_RECOVERABLE</h3>
  <p class="para">
   A mensagem de erro para o tipo E_RECOVERABLE foi alterada de &quot;Catchable
   fatal error&quot; (erro fatal capturável) para &quot;Recoverable fatal error&quot; (erro fatal recuperável).
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.unserialize">
  <h3 class="title">Parâmetro $options da função unserialize()</h3>
  <p class="para">
   O elemento <code class="literal">allowed_classes</code> do parâmetro $options da função
   <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> agora é estritamente tipada, isto é, se algo além
   de um <span class="type"><a href="language.types.array.php" class="type array">array</a></span> ou um <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> for fornecido,
   unserialize() retorna <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> e emite um <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.datetime-microseconds">
  <h3 class="title">Construtor DateTime incorpora microssegundos</h3>
  <p class="para">
   <span class="classname"><a href="class.datetime.php" class="classname">DateTime</a></span> e <span class="classname"><a href="class.datetimeimmutable.php" class="classname">DateTimeImmutable</a></span>
   agora incorporam adequadamente microssegundos quando construídos com o horário atual,
   tanto explicitamente quanto com uma string relativa (ex.: <code class="literal">&quot;first day of next
   month&quot;</code>). Isto significa que as comparações nativas de duas novas instâncias
   criadas agora irão muito provavelmente retornar <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> ao invés de <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>:
   <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">new </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">() == new </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.fatal-errors-to-error-exceptions">
  <h3 class="title">Conversões de erros fatais para exceções <span class="classname"><a href="class.error.php" class="classname">Error</a></span></h3>
  <p class="para">
   Na extensão Date, dados de serialização inválidos para as classes
   <span class="classname"><a href="class.datetime.php" class="classname">DateTime</a></span> ou <span class="classname"><a href="class.dateperiod.php" class="classname">DatePeriod</a></span>,
   ou falha de inicialização de fuso horário a partir de dados serializados, agora irão lançar
   uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span> pelos métodos
   <span class="methodname"><strong>__wakeup()</strong></span> ou <span class="methodname"><strong>__set_state()</strong></span>,
   ao invés de resultar em um erro fatal.
  </p>

  <p class="para">
   Na extensão DBA, funções de modificação de dados (como
   <span class="function"><a href="function.dba-insert.php" class="function">dba_insert()</a></span>) agora irão lançar uma exceção
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de disparar um erro fatal
   capturável se a chave não contiver exatamente dois elementos.
  </p>

  <p class="para">
   Na extensão DOM, esquema inválido ou contextos de validação RelaxNG agora irão
   lançar uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de resultar em um
   erro fatal. Da mesma forma, a tentativa de registrar uma classe de nó que não
   estende a classe base apropriada, ou a tentativa de ler uma propriedade inválida
   ou de escrever em um propriedade somente-leitura, irão também lançar
   uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   Na extensão IMAP, endereços de e-mail maiores que 16385 bytes irão lançar uma
   exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de resultar em um erro fatal.
  </p>

  <p class="para">
   Na extensão Intl, a falha ao chamar o construtor pai em uma classe
   que estende <span class="classname"><a href="class.collator.php" class="classname">Collator</a></span> antes de chamar os métodos da classe pai
   irão lançar uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de resultar em um erro
   fatal recuperável. Além disso, clonar um objeto
   <span class="classname"><a href="class.transliterator.php" class="classname">Transliterator</a></span> agora irá lançar uma exceção
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> na falha ao clonar o transliterador
   interno ao invés de resultar em um erro fatal.
  </p>

  <p class="para">
   Na extesão LDAP, fornecer um tipo de modificação desconhecido a
   <span class="function"><strong>ldap_batch_modify()</strong></span> agora irá lançar uma exceção
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de resultar em um erro fatal.
  </p>

  <p class="para">
   Na extensão mbstring, as funções <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> e
   <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span> agora irão lançar uma exceção
   <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> se uma expressão PHP inválida for
   fornecida e a opção &#039;e&#039; for usada.
  </p>

  <p class="para">
   Na extensão Mcrypt, as funções <span class="function"><a href="function.mcrypt-encrypt.php" class="function">mcrypt_encrypt()</a></span> e
   <span class="function"><a href="function.mcrypt-decrypt.php" class="function">mcrypt_decrypt()</a></span> agora irão lançar uma exceção
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de resultar em um erro fatal
   se mcrypt não puder ser inicializada.
  </p>

  <p class="para">
   Na extensão mysqli, a tentativa de se ler uma propriedade inválida ou de escrever
   em uma propriedade somente-leitura irá agora lançar uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span>
   ao invés de resultar em um erro fatal.
  </p>

  <p class="para">
   Na extensão Reflection, falha em receber um objeto de reflexão ou
   receber uma propriedade de objeto agora irá lançar uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span>
   ao invés de resultar em um erro fatal.
  </p>

  <p class="para">
   Na extensão Session, manipuladores de sessão customizados que não retornem strings
   para IDs de sessão agora irão lançar uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span>
   ao invés de resultar em um erro fatal quando uma função que deveria gerar
   um ID de sessão for chamada.
  </p>

  <p class="para">
   Na extensão SimpleXML, criar um atributo sem nome ou duplicado irá
   agora lançar uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de resultar
   em um erro fatal.
  </p>

  <p class="para">
   Na extensão SPL, tentar clonar um objeto
   <span class="classname"><strong class="classname">SplDirectory</strong></span> object agora irá lançar uma exceção
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de resultar em um erro
   fatal. Da mesma forma, chamar <span class="methodname"><a href="arrayiterator.append.php" class="methodname">ArrayIterator::append()</a></span> ao
   iterar sobre um objeto também irá lançar uma exceção
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   Na extensão standard, a função <span class="function"><a href="function.assert.php" class="function">assert()</a></span>, quando
   alimentada por um argumento string como seu primeiro parâmetro, agora irá lançar
   uma exceção <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> ao invés de resultar em um
   erro fatal recuperável se o código PHP for inválido. Da mesma forma, chamar
   <span class="function"><a href="function.forward-static-call.php" class="function">forward_static_call()</a></span> for de um escopo de classe agora irá
   lançar uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   Na extensão Tidy, criar um <span class="classname"><a href="class.tidynode.php" class="classname">tidyNode</a></span> manualmente
   agora irá lançar uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de
   resultar em um erro fatal.
  </p>

  <p class="para">
   Na extensão WDDX, uma referência circular durante serialização agora irá lançar
   uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de resultar em um erro
   fatal.
  </p>

  <p class="para">
   Na extensão XML-RPC, uma referência circular durante serialização agora irá lançar
   uma instância da exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de
   resultar em um erro fatal.
  </p>

  <p class="para">
   Na extensão Zip, o método <span class="methodname"><a href="ziparchive.addglob.php" class="methodname">ZipArchive::addGlob()</a></span>
   agora irá lançar uma exceção <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ao invés de
   resultar em um erro fatal se o suporte a glob não estiver disponível.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.lexical-names">
  <h3 class="title">Variáveis ​​vinculadas lexicamente não podem reutilizar nomes</h3>

  <p class="para">
   Variáveis vinculadas a uma <a href="functions.anonymous.php" class="link">função anônima</a> através do
   construtor de linguagem <code class="literal">use</code> não podem usar o mesmo nome de nenhuma das variáveis
   <a href="language.variables.predefined.php" class="link">superglobals</a>, <var class="varname">$this</var>, ou de qualquer parâmetro. Por
   exemplo, todas estas definições de funções irão resultar em um erro fatal:

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">) {};<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$this</span><span style="color: #007700">) {};<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= function (</span><span style="color: #0000BB">$param</span><span style="color: #007700">) use (</span><span style="color: #0000BB">$param</span><span style="color: #007700">) {};</span></span></code></div>
    </div>

   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.long2ip">
  <h3 class="title">Alteração no tipo do parâmetro de long2ip()</h3>
  <p class="para">
   <span class="function"><a href="function.long2ip.php" class="function">long2ip()</a></span> agora espera um <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> ao invés de uma
   <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.json">
  <h3 class="title">Codificação e decodificação JSON</h3>
  <p class="para">
   A configuração ini <code class="parameter">serialize_precision</code> agora controla a
   precisão de serialização ao codificar valores do tipo <span class="type"><a href="language.types.float.php" class="type float">float</a></span>.
  </p>
  <p class="para">
   Decodificar uma chave vazia agora resulta em um nome de propriedade vazio, ao invés de
   <code class="literal">_empty_</code> como nome de propriedade.

   <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">json_decode</span><span style="color: #007700">(</span><span style="color: #0000BB">json_encode</span><span style="color: #007700">([</span><span style="color: #DD0000">'' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">])));</span></span></code></div>
   </div>

   <p class="para">O exemplo acima produzirá
algo semelhante a:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
object(stdClass)#1 (1) {
  [&quot;&quot;]=&gt;
  int(1)
}
</pre></div>
   </div>
  </div>
  </p>
  <p class="para">
   A fornecer a opção <strong><code><a href="json.constants.php#constant.json-unescaped-unicode">JSON_UNESCAPED_UNICODE</a></code></strong> para
   <span class="function"><a href="function.json-encode.php" class="function">json_encode()</a></span>, as sequências U+2028 e U+2029 agora
   são escapadas.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.mbstring">
  <h3 class="title">
   Alteração na semântica de parâmetros de <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> e
   <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span>
  </h3>
  <p class="para">
   O terceiro parâmetro das funções <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> e
   <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span> (<code class="parameter">regs</code>) agora será
   definido para um array vazio se nada tiver sido correspondido. Anteriormente, o parâmetro
   não teria sido modificado.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.openssl">
  <h3 class="title">Fim do suporte ao fluxo sslv2</h3>
  <p class="para">
   O fluxo sslv2 agora foi removido do OpenSSL.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.typed-returns-compile-time">
  <h3 class="title">Proibição de &quot;return;&quot; para retornos tipados já em tempo de compilação</h3>
  <p class="para">
   Instruções de retorno sem nenhum argumento em funções que declaram um tipo para o retorno
   agora disparam um erro do tipo <strong><code><a href="errorfunc.constants.php#constant.e-compile-error">E_COMPILE_ERROR</a></code></strong> (a menos que o tipo do retorno
   seja declarado como <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span>), mesmo que a instrução de retorno nunca seja
   alcançada.
  </p>
 </div>

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