mirror of
https://github.com/php/doc-pt_br.git
synced 2026-03-23 22:52:12 +01:00
1720 lines
64 KiB
XML
1720 lines
64 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: b94d63fc0884d83ba43433ab33cc4810d955bf6d Maintainer: leonardolara Status: ready --><!-- CREDITS: geekcom,adiel,lhsazevedo,atomotavio,ae,leonardolara -->
|
||
|
||
<sect1 xml:id="migration80.incompatible" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<title>Alterações incompatíveis com versões anteriores</title>
|
||
|
||
<sect2 xml:id="migration80.incompatible.core">
|
||
<title>Núcleo do PHP</title>
|
||
|
||
<sect3 xml:id="migration80.incompatible.core.string-number-comparision">
|
||
<title>Comparação entre String e Número</title>
|
||
|
||
<para>
|
||
Comparações não estritas entre números e strings não numéricas, agora funcionam convertendo o número em
|
||
string e comparando as strings. As comparações entre números e strings numéricas continuam
|
||
funcionando como antes. Notavelmente, isso significa que a comparação: <code>0 == "not-a-number"</code> agora é considerada
|
||
falsa.
|
||
<informaltable>
|
||
<tgroup cols="3">
|
||
<thead>
|
||
<row>
|
||
<entry>Comparação</entry>
|
||
<entry>Antes</entry>
|
||
<entry>Depois</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><code>0 == "0"</code></entry>
|
||
<entry>&true;</entry>
|
||
<entry>&true;</entry>
|
||
</row>
|
||
<row>
|
||
<entry><code>0 == "0.0"</code></entry>
|
||
<entry>&true;</entry>
|
||
<entry>&true;</entry>
|
||
</row>
|
||
<row>
|
||
<entry><code>0 == "foo"</code></entry>
|
||
<entry>&true;</entry>
|
||
<entry>&false;</entry>
|
||
</row>
|
||
<row>
|
||
<entry><code>0 == ""</code></entry>
|
||
<entry>&true;</entry>
|
||
<entry>&false;</entry>
|
||
</row>
|
||
<row>
|
||
<entry><code>42 == " 42"</code></entry>
|
||
<entry>&true;</entry>
|
||
<entry>&true;</entry>
|
||
</row>
|
||
<row>
|
||
<entry><code>42 == "42foo"</code></entry>
|
||
<entry>&true;</entry>
|
||
<entry>&false;</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
<!-- RFC: https://wiki.php.net/rfc/string_to_number_comparison -->
|
||
</para>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="migration80.incompatible.core.other">
|
||
<title>Outras mudanças incompatíveis</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
<literal>match</literal> agora é uma palavra reservada.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<literal>mixed</literal> agora é uma palavra reservada, portanto, não pode ser usado para nomear uma classe, interface ou trait, e também é proibido de ser usado em namespaces.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
As falhas de asserção agora são lançadas por padrão. Se o comportamento antigo é desejado,
|
||
<code>assert.exception=0</code> pode ser definido nas configurações INI.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Métodos com o mesmo nome de classe não são mais interpretados como construtores. O
|
||
método <link linkend="object.construct">__construct()</link> deve ser utilizado em seu lugar.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A capacidade de chamar métodos não estáticos estaticamente foi removida. Por isso
|
||
a função <function>is_callable</function> irá falhar ao verificar um método não estático com
|
||
um nome de classe (deve se realizar uma verificação com uma instância de objeto).
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Foram removidas as conversões de tipos, <code>(real)</code> e <code>(unset)</code>.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A diretiva do php.ini <link linkend="ini.track-errors">track_errors</link> foi removida. Isto
|
||
significa que a variável <varname>php_errormsg</varname> não está mais disponível. A função
|
||
<function>error_get_last</function> deve ser utilizada em seu lugar.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A capacidade de definir constantes que não diferenciam maiúsculas de minúsculas foi removida. O
|
||
terceiro argumento para a função <function>define</function> não pode ser mais &true;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A capacidade de especificar um auto carregamento utilizando a função <function>__autoload</function> foi
|
||
removida. A função <function>spl_autoload_register</function> deve ser utilizada em seu lugar.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O argumento <parameter>errcontext</parameter> não será mais usado para manipulação de erros personalizados
|
||
definido com a função <function>set_error_handler</function>.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A função <function>create_function</function> foi removida. Ao invés disso, funções anônimas devem ser utilizadas.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A função <function>each</function> foi removida. &foreach; ou <classname>ArrayIterator</classname>
|
||
devem ser utilizados em seu lugar.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Foi removida a capacidade de desvincular <varname>this</varname> de closures que foram
|
||
criadas a partir de um método, usando <methodname>Closure::fromCallable</methodname> ou
|
||
<methodname>ReflectionMethod::getClosure</methodname>.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A habilidade de desvincular <varname>this</varname> de closures que contêm usos de
|
||
<varname>this</varname> também foi removida.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A habilidade de utilizar a função <function>array_key_exists</function> com objetos foi removida.
|
||
as funções <function>isset</function> ou <function>property_exists</function> devem ser usadas em seu lugar.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O comportamento da função <function>array_key_exists</function> com relação ao tipo do parâmetro
|
||
<parameter>key</parameter> agora é consistente com a função <function>isset</function> e
|
||
acesso normal à arrays. Todos os tipos de chave agora usam as coerções usuais e as chaves de
|
||
array/objeto lançam um <classname>TypeError</classname>.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Qualquer array com número <replaceable>n</replaceable> em sua primeira posição utilizará
|
||
<replaceable>n+1</replaceable> em sua próxima chave implícita mesmo se <replaceable>n</replaceable>
|
||
for negativo.
|
||
<!-- RFC: https://wiki.php.net/rfc/negative_array_index -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O nível de error_reporting padrão agora é <constant>E_ALL</constant>. Anteriormente excluía
|
||
<constant>E_NOTICE</constant> e <constant>E_DEPRECATED</constant>.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<link linkend="ini.display-startup-errors">display_startup_errors</link> agora é habilitado por
|
||
padrão.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Usar <type>parent</type> dentro de uma classe sem pai agora produzirá um erro fatal
|
||
em tempo de execução.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O operador <literal>@</literal> não irá mais silenciar erros fatais
|
||
(<constant>E_ERROR</constant>, <constant>E_CORE_ERROR</constant>,
|
||
<constant>E_COMPILE_ERROR</constant>, <constant>E_USER_ERROR</constant>,
|
||
<constant>E_RECOVERABLE_ERROR</constant>, <constant>E_PARSE</constant>). Manipuladores de erros que
|
||
esperam que error_reporting seja <literal>0</literal> quando <literal>@</literal> é usado, devem
|
||
ser ajustados para usar uma verificação de máscara:
|
||
</para>
|
||
<para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
// Substituir isso ...
|
||
function my_error_handler($err_no, $err_msg, $filename, $linenum) {
|
||
if (error_reporting() == 0) {
|
||
return false;
|
||
}
|
||
// ...
|
||
}
|
||
|
||
// ... por isso:
|
||
function my_error_handler($err_no, $err_msg, $filename, $linenum) {
|
||
if (!(error_reporting() & $err_no)) {
|
||
return false;
|
||
}
|
||
// ...
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
<para>
|
||
Adicionalmente, cuidados devem ser tomados para que mensagens de erro não sejam mostradas
|
||
no ambiente de produção, o que pode resultar em vazamento de informações. Certifique-se
|
||
de que a diretiva <code>display_errors=Off</code> seja usada em conjunto com o log de erros.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<literal>#[</literal> não é mais interpretado como o início de um comentário,
|
||
já que esta sintaxe é utilizada agora para atributos.
|
||
<!-- RFC: https://wiki.php.net/rfc/shorter_attribute_syntax_change -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Erros de herança devido a assinaturas de métodos incompatíveis (violações de LSP) agora sempre gerarão
|
||
um erro fatal. Antes, um aviso era gerado em alguns casos.
|
||
<!-- RFC: https://wiki.php.net/rfc/lsp_errors -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A precedência dos operadores de concatenação foi modificada em relação ao bitshifts tanto na adição
|
||
como na subtração.
|
||
</para>
|
||
<para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
echo "Sum: " . $a + $b;
|
||
// Era interpretado como:
|
||
echo ("Sum: " . $a) + $b;
|
||
// e passa a ser interpretado como:
|
||
echo "Sum:" . ($a + $b);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
<!-- RFC: https://wiki.php.net/rfc/concatenation_precedence -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Argumentos com um valor padrão que avaliam &null; em tempo de execução, não irão mais marcar
|
||
o tipo do parâmetro como implícito. Um tipo explícito nulo, ou explicitamente &null; como argumento padrão
|
||
deve ser usado em seu lugar.
|
||
</para>
|
||
<para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
// Subistituir
|
||
function test(int $arg = CONST_RESOLVING_TO_NULL) {}
|
||
// Por isso
|
||
function test(?int $arg = CONST_RESOLVING_TO_NULL) {}
|
||
// Ou isso
|
||
function test(int $arg = null) {}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Uma série de avisos foram convertidos para exceções do tipo <classname>Error</classname>:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member>
|
||
A tentativa de escrita em uma propriedade de um não-objeto. Anteriormente isso
|
||
criava implicitamente um objeto stdClass para strings nulas, falsas e vazias.
|
||
</member>
|
||
<member>
|
||
A tentativa de anexar um elemento a um array para a qual a chave PHP_INT_MAX
|
||
já está em uso.
|
||
</member>
|
||
<member>
|
||
Tentar usar um tipo inválido (array ou objeto) como uma chave de array ou
|
||
deslocamento de string.
|
||
</member>
|
||
<member>A tentativa de escrever em um índice de array de um valor escalar.</member>
|
||
<member>Tentar descompactar um não-array/Traversable.</member>
|
||
<member>
|
||
Tentar acessar constantes não qualificadas que são indefinidas.
|
||
Anteriormente, os acessos constantes não qualificados resultavam em um aviso e eram interpretados como strings.
|
||
</member>
|
||
<member>
|
||
Passar o número errado de argumentos para uma função sem argumento variadic
|
||
ira lançar uma exceção <classname>ArgumentCountError</classname>.
|
||
</member>
|
||
<member>
|
||
Passar tipos contáveis inválidos para <function>count</function> irá lançar
|
||
uma exceção <classname>TypeError</classname>.
|
||
</member>
|
||
</simplelist>
|
||
</para>
|
||
<para>
|
||
Uma série de notificações foram convertidas em avisos:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member>A tentativa de leitura em uma variável não definida.</member>
|
||
<member>A tentativa de leitura em uma propriedade não definida.</member>
|
||
<member>A tentativa de leitura em uma chave de array não definido.</member>
|
||
<member>A tentativa de leitura em uma propriedade de um não-objeto.</member>
|
||
<member>A tentativa de acesso em um índice de array em um não-array.</member>
|
||
<member>A tentativa de conversão de um array para uma string.</member>
|
||
<member>A tentativa de usar um resource como uma chave de array.</member>
|
||
<member>A tentativa de usar null, um booleano ou um número de ponto flutuante(float) como uma posição em uma string.</member>
|
||
<member>A tentativa de leitura em uma posição fora dos limites de uma string.</member>
|
||
<member>A tentativa de atribuir uma string vazia a uma posição de uma string.</member>
|
||
</simplelist>
|
||
<!-- RFC: https://wiki.php.net/rfc/engine_warnings -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A tentativa de atribuir múltiplos bytes em uma posição de uma string agora emite um aviso.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Caracteres inesperados no código fonte (como bytes NUL fora de strings) agora irá resultar em uma
|
||
exceção <classname>ParseError</classname> em vez de um aviso do compilador.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
As exceções não capturadas agora passam por "desligamento limpo", o que significa que os destrutores são chamados
|
||
após uma exceção não detectada.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O erro fatal em tempo de compilação "Only variables can be passed by reference" foi adiado até o
|
||
tempo de execução, e convertido em uma exceção de <classname>Error</classname>
|
||
"Argument cannot be passed by reference".
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Alguns alertas do tipo "Only variables should be passed by reference" foram convertidas para
|
||
exceções do tipo "Argument cannot be passed by reference"
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O nome gerado para classes anônimas foi modificado. Agora, inclui o nome da primeira classe ou
|
||
interface:
|
||
</para>
|
||
<para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
new class extends ParentClass {};
|
||
// -> ParentClass@anonymous
|
||
new class implements FirstInterface, SecondInterface {};
|
||
// -> FirstInterface@anonymous
|
||
new class {};
|
||
// -> class@anonymous
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
<para>
|
||
O nome mostrado acima ainda é seguido por um byte NUL e um sufixo único.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
As referências de método de traits não absolutas em adaptações de alias de traits agora precisam ser
|
||
inequívocas:
|
||
</para>
|
||
<para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
class X {
|
||
use T1, T2 {
|
||
func as otherFunc;
|
||
}
|
||
function func() {}
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
<para>
|
||
Se <code>T1::func()</code> e <code>T2::func()</code> existem, este código anteriormente era
|
||
aceito de forma silenciosa e func assumia referência a <code>T1::func</code>. Agora irá gerar um
|
||
erro fatal, e <code>T1::func</code> ou <code>T2::func</code> precisam ser
|
||
escritos explicitamente.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A assinatura de métodos abstratos definido nas características agora é verificada no método de implementação
|
||
da classe:
|
||
</para>
|
||
<para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
trait MyTrait {
|
||
abstract private function neededByTrait(): string;
|
||
}
|
||
|
||
class MyClass {
|
||
use MyTrait;
|
||
|
||
// Erro por conta do retorno desalinhado.
|
||
private function neededByTrait(): int { return 42; }
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
<!-- RFC: https://wiki.php.net/rfc/abstract_trait_method_validation -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Funções desabilitadas agora são tratadas da mesma forma que funções não existentes. Ao chamar
|
||
uma função desabilitada será informado que ela é desconhecida, e redefinir uma função desabilitada agora é possível.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Os empacotadores de fluxo <literal>data://</literal> não podem mais ser writable (gravável), indo
|
||
de encontro ao comportamento documentado.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Os operadores aritméticos e bitwise (bit a bit) <literal>+</literal>, <literal>-</literal>,
|
||
<literal>*</literal>, <literal>/</literal>, <literal>**</literal>, <literal>%</literal>,
|
||
<literal><<</literal>, <literal>>></literal>, <literal>&</literal>,
|
||
<literal>|</literal>, <literal>^</literal>, <literal>~</literal>, <literal>++</literal>,
|
||
<literal>--</literal> irão agora apresentar um <classname>TypeError</classname> quando um dos
|
||
operandos estiver em um &array;, &resource; ou em um &object; não sobrecarregado (non-overloaded). A única exceção a isto é
|
||
a operação de mesclagem de array com <literal>+</literal>, que permanece suportada.
|
||
<!-- RFC: https://wiki.php.net/rfc/arithmetic_operator_type_checks -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A conversão de float para string agora sempre terá o mesmo comportamento, independentemente da localidade.
|
||
</para>
|
||
<para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
setlocale(LC_ALL, "de_DE");
|
||
$f = 3.14;
|
||
echo $f, "\n";
|
||
// Anteriormente: 3,14
|
||
// Agora: 3.14
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
<para>
|
||
Veja as funções <function>printf</function>, <function>number_format</function> e
|
||
<methodname>NumberFormatter</methodname> para customizar a formatação de números.
|
||
<!-- RFC: https://wiki.php.net/rfc/locale_independent_float_to_string -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O suporte para chaves (curly braces), cujo uso para acesso de deslocamento estava descontinuado, foi removido.
|
||
</para>
|
||
<para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
// Ao invés de:
|
||
$array{0};
|
||
$array{"key"};
|
||
// Usar:
|
||
$array[0];
|
||
$array["key"];
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
<!-- RFC: https://wiki.php.net/rfc/deprecate_curly_braces_array_access -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Aplicar o modificador final ou método privado agora irá produzir um aviso, a menos que o método
|
||
seja o construtor.
|
||
<!-- FC: https://wiki.php.net/rfc/inheritance_private_methods -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Se um objeto construtor chama a função <function>exit</function>, o objeto destrutor não será chamado.
|
||
Isto vai de encontro ao comportamento que o construtor lança.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Nomes de Namespace não podem mais conter espaços em branco: Enquanto <code>Foo\Bar</code> será reconhecido
|
||
como um nome de Namespace, <code>Foo \ Bar</code> não será. Por outro lado, as palavras-chave agora serão
|
||
permitidas como segmentos de um namespace, o que permite a mudança na interpretação do código:
|
||
<code>new\x</code> agora é o mesmo que <code>constant('new\x')</code>,
|
||
e não <code>new \x()</code>.
|
||
<!-- RFC: https://wiki.php.net/rfc/namespaced_names_as_token -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Os ternários aninhados agora exigem parênteses explícitos.
|
||
<!-- RFC: https://wiki.php.net/rfc/ternary_associativity -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>debug_backtrace</function> e <methodname>Exception::getTrace</methodname> agora não mais
|
||
apresentam referências aos argumentos. Não será possível mudar os argumentos de uma função
|
||
através de um backtrace.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O uso de strings numéricas foi modificado para ser mais intuitivo e menos sujeito a erros. Seguindo
|
||
os espaços em branco, é permitido agora strings numéricas para tratamento de consistência contendo espaços em branco.
|
||
Isso afeta principalmente:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member>A função <function>is_numeric</function></member>
|
||
<member>Comparações string a string </member>
|
||
<member>Declaração de tipos</member>
|
||
<member>Operações de incremento e decremento</member>
|
||
</simplelist>
|
||
</para>
|
||
<para>
|
||
O conceito de um "leading-numeric string" foi praticamente abandonado; os casos onde permanecem
|
||
são para facilitar a migração. Strings que emitem um <constant>E_NOTICE</constant> "A non
|
||
well-formed numeric value encountered" agora emitirão um <constant>E_WARNING</constant> "A
|
||
non-numeric value encountered" e todas as strings que emitiram um <constant>E_WARNING</constant> "A
|
||
non-numeric value encountered" agora lançarão um erro
|
||
<classname>TypeError</classname>. Isso afeta principalmente:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member>Operações aritméticas</member>
|
||
<member>Operações bit a bit</member>
|
||
</simplelist>
|
||
</para>
|
||
<para>
|
||
Esta mudança do <constant>E_WARNING</constant> para <classname>TypeError</classname> também afeta o
|
||
<constant>E_WARNING</constant> "Illegal string offset 'string'" para o posicionamento ilegal de strings. O
|
||
comportamento de conversões explícitas de strings para int/float não foi alterado.
|
||
<!-- RFC: https://wiki.php.net/rfc/saner-numeric-strings -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Métodos mágicos agora podem ter argumentos e retornar tipos verificados se eles foram declarados.
|
||
As assinaturas devem corresponder à seguinte lista:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member><code>__call(string $name, array $arguments): mixed</code></member>
|
||
<member><code>__callStatic(string $name, array $arguments): mixed</code></member>
|
||
<member><code>__clone(): void</code></member>
|
||
<member><code>__debugInfo(): ?array</code></member>
|
||
<member><code>__get(string $name): mixed</code></member>
|
||
<member><code>__invoke(mixed $arguments): mixed</code></member>
|
||
<member><code>__isset(string $name): bool</code></member>
|
||
<member><code>__serialize(): array</code></member>
|
||
<member><code>__set(string $name, mixed $value): void</code></member>
|
||
<member><code>__set_state(array $properties): object</code></member>
|
||
<member><code>__sleep(): array</code></member>
|
||
<member><code>__unserialize(array $data): void</code></member>
|
||
<member><code>__unset(string $name): void</code></member>
|
||
<member><code>__wakeup(): void</code></member>
|
||
</simplelist>
|
||
<!-- RFC: https://wiki.php.net/rfc/magic-methods-signature -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
As chaves do array passados para a função <function>call_user_func_array</function> agora podem ser interpretadas
|
||
como nomes de parâmetros, em vez de serem silenciosamente ignoradas.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A declaração da função chamada <literal>assert()</literal> dentro de um namespace não é
|
||
mais permitida e gera um <constant>E_COMPILE_ERROR</constant>.
|
||
A função <function>assert</function> recebe um tratamento especial pelo motor do PHP,
|
||
o que pode levar a comportamentos inconsistentes quando definido como uma função de namespace com o mesmo nome.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect3>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.resource2object">
|
||
<title>Migração de Resource para Objeto</title>
|
||
|
||
<para>
|
||
Diversos &resource;s foram migrados para &object;s.
|
||
Verificações de valor de retorno usando a função <function>is_resource</function> devem ser substituídas por checagens para &false;.
|
||
</para>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
A função <function>curl_init</function> agora retornará um objeto <classname>CurlHandle</classname> ao invés
|
||
de um &resource;. A função <function>curl_close</function> não tem mais efeito,
|
||
em vez disso a instância da classe <classname>CurlHandle</classname> é destruída automaticamente se não for
|
||
mais referenciada.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A função <function>curl_multi_init</function> agora retornará um objeto <classname>CurlMultiHandle</classname> ao invés
|
||
de um &resource;. A função <function>curl_multi_close</function> não tem mais efeito,
|
||
em vez disso a instância da classe <classname>CurlMultiHandle</classname> é destruída automaticamente se não for
|
||
mais referenciada.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>curl_share_init</function> agora retornará um objeto <classname>CurlShareHandle</classname>
|
||
em vez de um &resource;. A função <function>curl_share_close</function> não tem mais efeito,
|
||
em vez disso a instância da classe <classname>CurlShareHandle</classname> é
|
||
destruída automaticamente se não for mais referenciada.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>enchant_broker_init</function> agora retornará um objeto <classname>EnchantBroker</classname>
|
||
em vez de um &resource;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>enchant_broker_request_dict</function> e
|
||
<function>enchant_broker_request_pwl_dict</function> agora retornarão um objeto
|
||
<classname>EnchantDictionary</classname> em vez de um &resource;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A extensão GD agora usa objetos <classname>GdImage</classname> como a estrutura de dados interna
|
||
para imagens, em vez de &resource;s.
|
||
A função <function>imagedestroy</function> não tem mais efeito; em vez disso a
|
||
instância <classname>GdImage</classname> é destruída automaticmanete se não for mais referenciada.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>openssl_x509_read</function> e <function>openssl_csr_sign</function> agora retornarão
|
||
um objeto <classname>OpenSSLCertificate</classname> em vez de um &resource;.
|
||
A função <function>openssl_x509_free</function> está descontinuada e não tem mais efeito,
|
||
em vez disso a instância <classname>OpenSSLCertificate</classname> é destruída automaticamente se
|
||
não for mais referenciada.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>openssl_csr_new</function> agora retornará um
|
||
objeto <classname>OpenSSLCertificateSigningRequest</classname> em vez de um &resource;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>openssl_pkey_new</function> agora retornará um
|
||
objeto <classname>OpenSSLAsymmetricKey</classname> em vez de um &resource;.
|
||
A função <function>openssl_pkey_free</function> está descontinuada e não tem mais efeito,
|
||
em vez disso a instância <classname>OpenSSLAsymmetricKey</classname> é destruída automaticamente se
|
||
não for mais referenciada.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>shmop_open</function> irá agora retornar um objeto <classname>Shmop</classname> ao invés de
|
||
um &resource;. A função <function>shmop_close</function> não tem mais efeitos, e foi
|
||
descontinuada. A instância de <classname>Shmop</classname> será automaticamente destruída quando
|
||
não seja mais referenciada.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>socket_create</function>, <function>socket_create_listen</function>,
|
||
<function>socket_accept</function>, <function>socket_import_stream</function>,
|
||
<function>socket_addrinfo_connect</function>, <function>socket_addrinfo_bind</function>, e
|
||
<function>socket_wsaprotocol_info_import</function> agora retornarão um
|
||
objeto <classname>Socket</classname> em vez de um &resource;.
|
||
<function>socket_addrinfo_lookup</function> agora retornará um array de
|
||
objetos <classname>AddressInfo</classname> em vez de &resource;s.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>msg_get_queue</function> agora retornará um objeto <classname>SysvMessageQueue</classname>
|
||
em vez de um &resource;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>sem_get</function> agora retornará um objeto <classname>SysvSemaphore</classname>
|
||
em vez de um &resource;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>shm_attach</function> agora retornará um objeto <classname>SysvSharedMemory</classname>
|
||
em vez de um &resource;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>xml_parser_create</function> e <function>xml_parser_create_ns</function> agora
|
||
retornarão um objeto <classname>XMLParser</classname> em vez de um &resource;. A função
|
||
<function>xml_parser_free</function> não tem mais efeito, em vez disso a instância XMLParser
|
||
é automaticamente destruída se não for mais referenciada.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A função <link linkend="book.xmlwriter">XMLWriter</link> agora aceita e retorna, respectivamente,
|
||
objetos <classname>XMLWriter</classname> em vez de &resource;s.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>inflate_init</function> agora retornará um objeto <classname>InflateContext</classname>
|
||
em vez de um &resource;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>deflate_init</function> agora retornará um objeto <classname>DeflateContext</classname>
|
||
em vez de um &resource;.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.com">
|
||
<title>COM e .Net (Windows)</title>
|
||
|
||
<para>
|
||
A capacidade de importar constantes que não diferenciam maiúsculas de minúsculas de bibliotecas de tipos foi removida.
|
||
O segundo argumento para <function>com_load_typelib</function> não pode mais ser falso;
|
||
<link linkend="ini.com.autoregister-casesensitive">com.autoregister_casesensitive</link>
|
||
não pode mais ser desabilitado; marcadores que não diferenciam maiúsculas de minúsculas em
|
||
<link linkend="ini.com.typelib-file">com.typelib_file</link> são ignorados.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.curl">
|
||
<title>CURL</title>
|
||
|
||
<para>
|
||
<constant>CURLOPT_POSTFIELDS</constant> não aceita mais objetos como arrays. Para
|
||
interpretar um objeto como um array, executar uma conversão explícita de <code>(array)</code>. O
|
||
mesmo se aplica a outras opções que aceitam arrays também.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.datetime">
|
||
<title>Data e hora</title>
|
||
|
||
<para>
|
||
<function>mktime</function> e <function>gmmktime</function> agora requer pelo menos um
|
||
argumento. <function>time</function> pode ser usado para obter o registro de data e hora atual.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.dom">
|
||
<title>DOM</title>
|
||
|
||
<para>
|
||
Classes não implementadas da extensão DOM que não tinham comportamento e continham dados
|
||
de teste foram removidos. Essas classes também foram removidas na versão mais recente do
|
||
DOM padrão:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member><classname>DOMNameList</classname></member>
|
||
<member><classname>DomImplementationList</classname></member>
|
||
<member><classname>DOMConfiguration</classname></member>
|
||
<member><classname>DomError</classname></member>
|
||
<member><classname>DomErrorHandler</classname></member>
|
||
<member><classname>DOMImplementationSource</classname></member>
|
||
<member><classname>DOMLocator</classname></member>
|
||
<member><classname>DOMUserDataHandler</classname></member>
|
||
<member><classname>DOMTypeInfo</classname></member>
|
||
<member><classname>DOMStringExtend</classname></member>
|
||
</simplelist>
|
||
</para>
|
||
<para>
|
||
Métodos não implementados da extensão DOM que não tinham comportamento foram removidos:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member><methodname>DOMNamedNodeMap::setNamedItem</methodname></member>
|
||
<member><methodname>DOMNamedNodeMap::removeNamedItem</methodname></member>
|
||
<member><methodname>DOMNamedNodeMap::setNamedItemNS</methodname></member>
|
||
<member><methodname>DOMNamedNodeMap::removeNamedItemNS</methodname></member>
|
||
<member><methodname>DOMText::replaceWholeText</methodname></member>
|
||
<member><methodname>DOMNode::compareDocumentPosition</methodname></member>
|
||
<member><methodname>DOMNode::isEqualNode</methodname></member>
|
||
<member><methodname>DOMNode::getFeature</methodname></member>
|
||
<member><methodname>DOMNode::setUserData</methodname></member>
|
||
<member><methodname>DOMNode::getUserData</methodname></member>
|
||
<member><methodname>DOMDocument::renameNode</methodname></member>
|
||
</simplelist>
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.enchant">
|
||
<title>Enchant</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
<function>enchant_broker_list_dicts</function>, <function>enchant_broker_describe</function> e
|
||
<function>enchant_dict_suggest</function> agora retornam um array vazio no lugar de &null;.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.exif">
|
||
<title>Exif</title>
|
||
|
||
<para>
|
||
<function>read_exif_data</function> foi removido; <function>exif_read_data</function>
|
||
deve ser usado em seu lugar.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.filter">
|
||
<title>Filter</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
A <constant>FILTER_FLAG_SCHEME_REQUIRED</constant> e
|
||
<constant>FILTER_FLAG_HOST_REQUIRED</constant> sinalizadores para o filtro
|
||
<constant>FILTER_VALIDATE_URL</constant> foram removidas. O <literal>scheme</literal>
|
||
e <literal>host</literal> são (e foram) sempre necessários.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A fonte <constant>INPUT_REQUEST</constant> e <constant>INPUT_SESSION</constant> para
|
||
<function>filter_input</function> etc. foram removidos. Estes nunca foram implementados e seu
|
||
uso sempre gerou um warning.d
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.gd">
|
||
<title>GD</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
A função descontinuada <function>image2wbmp</function> foi removida.
|
||
<!-- RFC: https://wiki.php.net/rfc/image2wbmp -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
As funções descontinuadas <function>png2wbmp</function> e <function>jpeg2wbmp</function> foram
|
||
removidas.
|
||
<!-- RFC: https://wiki.php.net/rfc/deprecate-png-jpeg-2wbmp -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O parametro padrão <parameter>mode</parameter> de <function>imagecropauto</function> não aceita mais
|
||
<literal>-1</literal>. <constant>IMG_CROP_DEFAULT</constant> deve ser usado no lugar.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
No Windows, <filename>php_gd2.dll</filename> foi renomeado para <filename>php_gd.dll</filename>.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.gmp">
|
||
<title>GMP</title>
|
||
|
||
<para>
|
||
<function>gmp_random</function> foi removida. Uma das <function>gmp_random_range</function> ou
|
||
<function>gmp_random_bits</function> deve ser usado no lugar.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.iconv">
|
||
<title>Iconv</title>
|
||
|
||
<para>
|
||
implementações de iconv que não definem corretamente <varname>errno</varname> em caso de erros não são
|
||
mais suportadas.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.imap">
|
||
<title>IMAP</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
O argumento <parameter>default_host</parameter> não utilizado de <function>imap_headerinfo</function>
|
||
foi removido.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A função <function>imap_header</function> que é um alias de
|
||
<function>imap_headerinfo</function> foi removida.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.intl">
|
||
<title>Funções de Internacionalização</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
A constante descontinuada <constant>INTL_IDNA_VARIANT_2003</constant> foi removida.
|
||
<!-- RFC: https://wiki.php.net/rfc/deprecate-and-remove-intl_idna_variant_2003 -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A constante descontinuada <constant>Normalizer::NONE</constant> foi removida.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.ldap">
|
||
<title>LDAP</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
As funções descontinuadas <function>ldap_sort</function>,
|
||
<function>ldap_control_paged_result</function> e
|
||
<function>ldap_control_paged_result_response</function> foram removidas.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A interface de<function>ldap_set_rebind_proc</function> foi mudada; o parâmetro
|
||
<parameter>callback</parameter> não aceita strings vazias; &null; deve ser
|
||
usado no lugar.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.mbstring">
|
||
<title>MBString</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
A diretiva <link linkend="ini.mbstring.func-overload">mbstring.func_overload</link> foi
|
||
removida. As constantes relacionadas <constant>MB_OVERLOAD_MAIL</constant>,
|
||
<constant>MB_OVERLOAD_STRING</constant>, e <constant>MB_OVERLOAD_REGEX</constant>
|
||
também foram removidas. Finalmente, a <literal>"func_overload"</literal> e a
|
||
<literal>"func_overload_list"</literal> entradas <function>mb_get_info</function> foram
|
||
removidas.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>mb_parse_str</function> não pode mais ser usado sem especificar um array de resultados.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Vários sinônimos mbregex descontinuados foram removidos. Veja a seguinte
|
||
lista para quais funções devem ser usadas:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member><function>mbregex_encoding</function> → <function>mb_regex_encoding</function></member>
|
||
<member><function>mbereg</function> → <function>mb_ereg</function></member>
|
||
<member><function>mberegi</function> → <function>mb_eregi</function></member>
|
||
<member><function>mbereg_replace</function> → <function>mb_ereg_replace</function></member>
|
||
<member><function>mberegi_replace</function> → <function>mb_eregi_replace</function></member>
|
||
<member><function>mbsplit</function> → <function>mb_split</function></member>
|
||
<member><function>mbereg_match</function> → <function>mb_ereg_match</function></member>
|
||
<member><function>mbereg_search</function> → <function>mb_ereg_search</function></member>
|
||
<member><function>mbereg_search_pos</function> → <function>mb_ereg_search_pos</function></member>
|
||
<member><function>mbereg_search_regs</function> → <function>mb_ereg_search_regs</function></member>
|
||
<member><function>mbereg_search_init</function> → <function>mb_ereg_search_init</function></member>
|
||
<member><function>mbereg_search_getregs</function> → <function>mb_ereg_search_getregs</function></member>
|
||
<member><function>mbereg_search_getpos</function> → <function>mb_ereg_search_getpos</function></member>
|
||
<member><function>mbereg_search_setpos</function> → <function>mb_ereg_search_setpos</function></member>
|
||
</simplelist>
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O modificador <literal>e</literal> para <function>mb_ereg_replace</function> foi removido.
|
||
<function>mb_ereg_replace_callback</function> deve ser usado em seu lugar.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Um argumento de padrão não string para <function>mb_ereg_replace</function> agora será interpretado como
|
||
uma string em vez de um ponto de código ASCII. O comportamento anterior pode ser restaurado com uma chamada
|
||
explícita para <function>chr</function>.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O argumento <parameter>needle</parameter> para <function>mb_strpos</function>,
|
||
<function>mb_strrpos</function>, <function>mb_stripos</function>,
|
||
<function>mb_strripos</function>, <function>mb_strstr</function>,
|
||
<function>mb_stristr</function>, <function>mb_strrchr</function> e
|
||
<function>mb_strrichr</function> agora pode estar vazio.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O parâmetro <parameter>is_hex</parameter>, que não era usado internamente, foi removido de
|
||
<function>mb_decode_numericentity</function>.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O comportamento herdado de passar a codificação como o terceiro argumento em vez de um deslocamento para
|
||
a função <function>mb_strrpos</function> foi removida; um <literal>0</literal> explícito
|
||
offset com a codificação deve ser fornecido como o quarto argumento.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Os aliases de codificação de caracteres <literal>ISO_8859-*</literal> foram substituídos por
|
||
Aliases <literal>ISO8859-*</literal> para melhor interoperabilidade com a extensão iconv. os
|
||
aliases mbregex ISO 8859 com sublinhados (<literal>ISO_8859_*</literal> e
|
||
<literal>ISO8859_*</literal>) também foram removidos.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>mb_ereg</function> e <function>mb_eregi</function> agora retornarão valores booleanos &true; sobre
|
||
uma partida de sucesso. Anteriormente, eles retornavam inteiro <literal>1</literal> se
|
||
<parameter>matches</parameter> não foi passado, ou <code>max(1, strlen($matches[0]))</code> se
|
||
<parameter>matches</parameter> foi passado.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.oci8">
|
||
<title>OCI8</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
A classe <classname>OCI-Lob</classname> agora é chamada de <classname>OCILob</classname>, e a
|
||
a classe <classname>OCI-Collection</classname> agora se chama <classname>OCICollection</classname>
|
||
para conformidade de nome imposta pelas ferramentas de anotação de tipo PHP 8 arginfo.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Várias funções de alias foram marcadas como descontinuadas.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>oci_internal_debug</function> e seu alias <function>ociinternaldebug</function> foram
|
||
removidos.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.odbc">
|
||
<title>ODBC</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
<function>odbc_connect</function> não reutiliza mais conexões.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O parâmetro <parameter>flags</parameter> não usado de <function>odbc_exec</function> foi
|
||
removido.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.openssl">
|
||
<title>OpenSSL</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
<function>openssl_seal</function> e <function>openssl_open</function> agora requerem
|
||
<parameter>method</parameter> a ser passado, como o padrão anterior de <literal>"RC4"</literal>
|
||
é considerado inseguro.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.pcre">
|
||
<title>Expressões regulares (Compatíveis com Perl)</title>
|
||
|
||
<para>
|
||
Ao passar sequências de escape inválidas, elas não são mais interpretadas como literais. Esse comportamento
|
||
anteriormente exigia o modificador <literal>X</literal> – que agora é ignorado.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.pdo">
|
||
<title>Objetos de dados do PHP</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
O modo padrão de manipulação de erro foi alterado de "silent" para "exceptions". Consulte
|
||
<link linkend="pdo.error-handling">Erros e manipulação de erros</link> para detalhes.
|
||
<!-- RFC: https://wiki.php.net/rfc/pdo_default_errmode -->
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
As assinaturas de alguns métodos PDO foram alteradas:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member><code>PDO::query(string $query, ?int $fetchMode = null, mixed ...$fetchModeArgs)</code></member>
|
||
<member><code>PDOStatement::setFetchMode(int $mode, mixed ...$args)</code></member>
|
||
</simplelist>
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.pdo-odbc">
|
||
<title>PDO ODBC</title>
|
||
|
||
<para>
|
||
A diretiva
|
||
<link linkend="ini.pdo-odbc.db2-instance-name">pdo_odbc.db2_instance_name</link> do &php.ini;
|
||
foi removida.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.pdo-mysql">
|
||
<title>PDO MySQL</title>
|
||
|
||
<para>
|
||
<methodname>PDO::inTransaction</methodname> agora relata o estado real da transação da
|
||
conexão, em vez de uma aproximação mantida pelo PDO. Se uma consulta que é
|
||
sujeito para "confirmação implícita" é executado, <methodname>PDO::inTransaction</methodname>
|
||
posteriormente retornará &false;, pois uma transação não está mais ativa.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.pgsql">
|
||
<title>PostgreSQL</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
A sintaxe descontinuada de <function>pg_connect</function> usando vários parâmetros em vez de uma
|
||
string de conexão não é mais suportada.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
As assinaturas descontinuadas de <function>pg_lo_import</function> e <function>pg_lo_export</function>
|
||
que passam a conexão como o último argumento não são mais suportadas. A conexão deve ser
|
||
passada como primeiro argumento.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>pg_fetch_all</function> agora retornará um array vazio em vez de &false; para resultado
|
||
conjuntos com zero linha.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.phar">
|
||
<title>Phar</title>
|
||
|
||
<para>
|
||
Os metadados associados a um phar não serão mais serializados automaticamente, para corrigir possíveis
|
||
vulnerabilidades de segurança devido à instanciação de objetos, carregamento automático etc.
|
||
<!-- RFC: https://wiki.php.net/rfc/phar_stop_autoloading_metadata -->
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.reflection">
|
||
<title>Reflection</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
As assinaturas do método
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member><code>ReflectionClass::newInstance($args)</code></member>
|
||
<member><code>ReflectionFunction::invoke($args)</code></member>
|
||
<member><code>ReflectionMethod::invoke($object, $args)</code></member>
|
||
</simplelist>
|
||
</para>
|
||
<para>
|
||
foram alterados para:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member><code>ReflectionClass::newInstance(...$args)</code></member>
|
||
<member><code>ReflectionFunction::invoke(...$args)</code></member>
|
||
<member><code>ReflectionMethod::invoke($object, ...$args)</code></member>
|
||
</simplelist>
|
||
</para>
|
||
<para>
|
||
O código que deve ser compatível com PHP 7 e PHP 8 pode usar as seguintes
|
||
assinaturas para serem compatíveis com ambas as versões:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member><code>ReflectionClass::newInstance($arg = null, ...$args)</code></member>
|
||
<member><code>ReflectionFunction::invoke($arg = null, ...$args)</code></member>
|
||
<member><code>ReflectionMethod::invoke($object, $arg = null, ...$args)</code></member>
|
||
</simplelist>
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O método <methodname>ReflectionType::__toString</methodname> agora retornará uma completa representação
|
||
de depuração do tipo, e não está mais descontinuada. Em particular, o resultado incluirá um
|
||
indicador de nulidade para tipos anuláveis. O formato do valor de retorno não é estável e pode
|
||
mudar entre as versões do PHP.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Métodos export() de reflexão foram removidos.
|
||
Em vez disso, os objetos de reflexão podem ser convertidos em string.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<methodname>ReflectionMethod::isConstructor</methodname> e
|
||
<methodname>ReflectionMethod::isDestructor</methodname> agora também retorna &true; por
|
||
<link linkend="object.construct">__construct()</link> e
|
||
<link linkend="object.destruct">__destruct()</link> métodos de interfaces.
|
||
Anteriormente, isso só seria verdade para métodos de classes e traits.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O método <methodname>ReflectionType::isBuiltin</methodname> foi movido para
|
||
<classname>ReflectionNamedType</classname>. <classname>ReflectionUnionType</classname> não
|
||
possui esse método.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.sockets">
|
||
<title>Sockets</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
As constantes descontinuadas <constant>AI_IDN_ALLOW_UNASSIGNED</constant> e
|
||
<constant>AI_IDN_USE_STD3_ASCII_RULES</constant> <parameter>flags</parameter> para
|
||
<function>socket_addrinfo_lookup</function> foram removidas.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.spl">
|
||
<title>Biblioteca PHP padrão (SPL)</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
<methodname>SplFileObject::fgetss</methodname> foi removido.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<methodname>SplFileObject::seek</methodname> agora sempre posiciona no começo da linha.
|
||
Anteriormente, posições <literal>>=1</literal> resultavam no começo da linha seguinte.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<methodname>SplHeap::compare</methodname> agora especifica uma assinatura de método. Herdando classes,
|
||
implementar este método agora terá que usar uma assinatura de método compatível.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<methodname>SplDoublyLinkedList::push</methodname>,
|
||
<methodname>SplDoublyLinkedList::unshift</methodname> e
|
||
<methodname>SplQueue::enqueue</methodname> agora retornam <type>void</type> no lugar de &true;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>spl_autoload_register</function> agora sempre lançará um
|
||
<classname>TypeError</classname> em argumentos inválidos, portanto, o segundo argumento
|
||
<parameter>do_throw</parameter> é ignorado e um aviso será emitido se for definido como &false;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<classname>SplFixedArray</classname> agora é um <interfacename>IteratorAggregate</interfacename>
|
||
e não um <interfacename>Iterator</interfacename>.
|
||
<methodname>SplFixedArray::rewind</methodname>, <methodname>SplFixedArray::current</methodname>,
|
||
<methodname>SplFixedArray::key</methodname>, <methodname>SplFixedArray::next</methodname> e
|
||
<methodname>SplFixedArray::valid</methodname> foram removidos. Em seu lugar,
|
||
<methodname>SplFixedArray::getIterator</methodname> foi adicionado. Qualquer código que usa explicitamente
|
||
iteração sobre SplFixedArray agora deve obter um
|
||
<interfacename>Iterator</interfacename> até
|
||
<methodname>SplFixedArray::getIterator</methodname>. Isso significa que
|
||
<classname>SplFixedArray</classname> agora é seguro para uso em loops aninhados.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.standard">
|
||
<title>Biblioteca padrão</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
<function>assert</function> não avaliará mais argumentos de string, em vez disso, eles serão
|
||
tratados como qualquer outro argumento. <code>assert($a == $b)</code> deve ser usado em vez de
|
||
<code>assert('$a == $b')</code>. O <link
|
||
linkend="ini.assert.quiet-eval">assert.quiet_eval</link> diretiva ini e
|
||
as constantes <constant>ASSERT_QUIET_EVAL</constant> também foram removidas, pois não seriam mais
|
||
ter qualquer efeito.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>parse_str</function> não pode mais ser usado sem especificar um array de resultados.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O filtro <link linkend="filters.string.strip_tags">string.strip_tags</link> foi removido.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O argumento <parameter>needle</parameter> de <function>strpos</function>,
|
||
<function>strrpos</function>, <function>stripos</function>, <function>strripos</function>,
|
||
<function>strstr</function>, <function>strchr</function>, <function>strrchr</function> e
|
||
<function>stristr</function> agora sempre será interpretado como uma string. Anteriormente agulhas não-string
|
||
foram interpretadas como um ponto de código ASCII. Uma chamada explícita para <function>chr</function> pode
|
||
ser usado para restaurar o comportamento anterior.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O argumento <parameter>needle</parameter> para <function>strpos</function>,
|
||
<function>strrpos</function>, <function>stripos</function>, <function>strripos</function>,
|
||
<function>strstr</function>, <function>stristr</function> e <function>strrchr</function> podem
|
||
agora estar vazios.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O argumento <parameter>length</parameter> para <function>substr</function>,
|
||
<function>substr_count</function>, <function>substr_compare</function> e
|
||
<function>iconv_substr</function> agora pode ser &null;. &null; os valores se comportarão como se não houvesse
|
||
argumento de comprimento fornecido e, portanto, retornará o restante da string em vez de uma string
|
||
vazia.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O argumento <parameter>length</parameter> para <function>array_splice</function> agora pode ser
|
||
&null;. &null; os valores se comportarão de forma idêntica à omissão do argumento, removendo assim tudo
|
||
do <parameter>offset</parameter> até o final do array.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O argumento <parameter>args</parameter> de <function>vsprintf</function>,
|
||
<function>vfprintf</function> e <function>vprintf</function> agora devem ser um array. Anteriormente
|
||
qualquer tipo era aceito.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A opção <literal>'salt'</literal> de <function>password_hash</function> não é mais
|
||
suportado. Se a opção <literal>'salt'</literal> for usada, um aviso será gerado, o
|
||
salt é ignorado e um salt gerado é usado em seu lugar.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A função <function>quotemeta</function> agora retornará uma string vazia se uma string vazia
|
||
foi passada. Anteriormente &false; era devolvido.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
As seguintes funções foram removidas.
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member><function>hebrevc</function></member>
|
||
<member><function>convert_cyr_string</function></member>
|
||
<member><function>money_format</function></member>
|
||
<member><function>ezmlm_hash</function></member>
|
||
<member><function>restore_include_path</function></member>
|
||
<member><function>get_magic_quotes_gpc</function></member>
|
||
<member><function>get_magic_quotes_runtime</function></member>
|
||
<member><function>fgetss</function></member>
|
||
</simplelist>
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<constant>FILTER_SANITIZE_MAGIC_QUOTES</constant> foi removida.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Chamar <function>implode</function> com parâmetros na ordem inversa <code>($pieces,
|
||
$glue)</code> não é mais suportado.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>parse_url</function> agora distinguirá consultas e fragmentos ausentes e vazios:
|
||
</para>
|
||
<para>
|
||
<simplelist>
|
||
<member><code>http://example.com/foo → query = null, fragment = null</code></member>
|
||
<member><code>http://example.com/foo? → query = "", fragment = null</code></member>
|
||
<member><code>http://example.com/foo# → query = null, fragment = ""</code></member>
|
||
<member><code>http://example.com/foo?# → query = "", fragment = ""</code></member>
|
||
</simplelist>
|
||
Anteriormente, todos os casos resultavam em consultas e fragmentos &null;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>var_dump</function> e <function>debug_zval_dump</function> agora serão
|
||
números de ponto flutuante usando <link linkend="ini.serialize-precision">serialize_precision</link>
|
||
em vez de <link linkend="ini.precision">precisão</link>. Em uma configuração padrão, isto
|
||
significa que os números de ponto flutuante agora são impressos com total precisão por essas funções
|
||
depuradoras.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Se o array retornado por <link linkend="object.sleep">__sleep()</link> contiver propriedades
|
||
inexistentes, estas agora são silenciosamente ignoradas. Anteriormente, tais propriedades teriam sido
|
||
serializadas como se tivessem o valor &null;.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A localidade padrão na inicialização agora é sempre <literal>"C"</literal>. Nenhuma localidade é herdada do
|
||
ambiente por padrão. Anteriormente, <constant>LC_ALL</constant> era definida como
|
||
<literal>"C"</literal>, enquanto <constant>LC_CTYPE</constant> era herdada do ambiente.
|
||
No entanto, algumas funções não respeitavam a localidade herdada sem uma chamada
|
||
explícita <function>setlocale</function>. Uma chamada <function>setlocale</function> explícita agora é
|
||
sempre necessária se um componente de localidade deve ser alterado do padrão.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O fallback DES descontinuado em <function>crypt</function> foi removido. Se um desconhecido formato salt
|
||
for passado para <function>crypt</function>, a função falhará com <literal>*0</literal>
|
||
em vez de voltar para um hash DES fraco agora.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
A especificação de rodadas fora do intervalo para SHA256/SHA512 <function>crypt</function> agora falhará com
|
||
<literal>*0</literal> em vez de fixar no limite mais próximo. Isso corresponde ao comportamento da glibc.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O resultado das funções de classificação pode ter mudado, se o array contiver elementos que comparam como
|
||
igual.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Quaisquer funções que aceitam retornos de chamada que não são explicitamente especificados para aceitar parâmetros por
|
||
referência agora avisará se um retorno de chamada com parâmetros de referência for usado. Exemplos incluem
|
||
<function>array_filter</function> e <function>array_reduce</function>. Este já era o
|
||
caso para a maioria, mas não para todas as funções anteriormente.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
O empacotador de fluxo HTTP usado por funções como <function>file_get_contents</function>
|
||
agora anuncia HTTP/1.1 em vez de HTTP/1.0 por padrão. Isso não muda o comportamento do
|
||
cliente, mas pode fazer com que os servidores respondam de forma diferente. Para manter o comportamento antigo, defina a
|
||
opção de contexto de fluxo <literal>'protocol_version'</literal>, por exemplo
|
||
</para>
|
||
<para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$ctx = stream_context_create(['http' => ['protocol_version' => '1.0']]);
|
||
echo file_get_contents('http://example.org', false, $ctx);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Chamar <function>crypt</function> sem um salt explícito não é mais suportado. Se você
|
||
gostaria de produzir um hash forte com salt gerado automaticamente, use
|
||
<function>password_hash</function> em vez disso.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<function>substr</function>, <function>mb_substr</function>, <function>iconv_substr</function> e
|
||
<function>grapheme_substr</function> agora fixa consistentemente os deslocamentos fora dos limites à string
|
||
fronteira. Anteriormente, &false; era retornado em vez da string vazia em alguns casos.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
No Windows, as funções de execução do programa (<function>proc_open</function>, <function>exec</function>,
|
||
<function>popen</function> etc.) usando o shell, agora execute consistentemente <command>%comspec% /s
|
||
/c "$commandline"</command>, que tem o mesmo efeito que executar
|
||
<command>$commandline</command> (sem aspas adicionais).
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.sysvsem">
|
||
<title>Sysvsem</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
O parâmetro <parameter>auto_release</parameter> de <function>sem_get</function> foi alterado para
|
||
aceitar valores booleanos em vez de int.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.tidy">
|
||
<title>Tidy</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
O parâmetro <parameter>use_include_path</parameter>, que não era usado internamente, foi
|
||
removido de <function>tidy_repair_string</function>.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<methodname>tidy::repairString</methodname> e <methodname>tidy::repairFile</methodname> se tornaram
|
||
métodos estáticos.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.tokenizer">
|
||
<title>Tokenizer</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
Tokens <constant>T_COMMENT</constant> não incluirão mais uma quebra de linha à direita. Em vez disso, a quebra de linha será
|
||
parte de um token <constant>T_WHITESPACE</constant> seguinte. Deve-se notar que
|
||
<constant>T_COMMENT</constant> nem sempre é seguido de espaço em branco, Ele também pode ser seguido de
|
||
<constant>T_CLOSE_TAG</constant> ou o fim do arquivo (end-of-file).
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Nomes com agora são representados usando os tokens <constant>T_NAME_QUALIFIED</constant>
|
||
(<code>Foo\Bar</code>), <constant>T_NAME_FULLY_QUALIFIED</constant> (<code>\Foo\Bar</code>) e
|
||
<constant>T_NAME_RELATIVE</constant> (<code>namespace\Foo\Bar</code>).
|
||
<constant>T_NS_SEPARATOR</constant> é usado apenas para separadores de namespace independentes, e só é sintaticamente
|
||
válido em conjuncão com declarações de uso de grupo.
|
||
<!-- RFC: https://wiki.php.net/rfc/namespaced_names_as_token -->
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.xmlreader">
|
||
<title>XMLReader</title>
|
||
|
||
<para>
|
||
<methodname>XMLReader::open</methodname> e <methodname>XMLReader::XML</methodname> agora são
|
||
métodos estáticos. Eles ainda podem ser chamados como métodos de instância, mas classes herdadas precisam declará-los
|
||
como estáticos se elas sobrescrevem esses métodos.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.xmlrpc">
|
||
<title>XML-RPC</title>
|
||
|
||
<para>
|
||
A extensão XML-RPC foi movida para PECL e não é mais parte da distribuição
|
||
PHP.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.zip">
|
||
<title>Zip</title>
|
||
|
||
<para>
|
||
<constant>ZipArchive::OPSYS_Z_CPM</constant> foi removida (esse nome era um erro de digitação). Em vez dela,
|
||
use <constant>ZipArchive::OPSYS_CPM</constant>.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.zlib">
|
||
<title>Zlib</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
<function>gzgetss</function> foi removida.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
<link linkend="ini.zlib.output-compression">zlib.output_compression</link> não é mais
|
||
desabilitado automaticamente para o <literal>Content-Type: image/*</literal>.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="migration80.incompatible.php-test-packs">
|
||
<title>Pacotes de teste para PHP no Windows</title>
|
||
|
||
<para>
|
||
O executor de testes foi renomeado de <filename>run-test.php</filename> para
|
||
<filename>run-tests.php</filename>, para coincidir com seu nome em php-src.
|
||
</para>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|