- 
     
      matchagora é uma palavra reservada.
 
- 
     
      mixedagora é 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.
 
- 
     
      As falhas de asserção agora são lançadas por padrão. Se o comportamento antigo é desejado,
      assert.exception=0pode ser definido nas configurações INI.
 
- 
     
      Métodos com o mesmo nome de classe não são mais interpretados como construtores. O
      método __construct() deve ser utilizado em seu lugar.
      
- 
     
      A capacidade de chamar métodos não estáticos estaticamente foi removida. Por isso
      a função is_callable() 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).
      
- 
     
      Foram removidas as conversões de tipos, (real)e(unset).
 
- 
      
       A diretiva do php.ini track_errors foi removida. Isto
       significa que a variável php_errormsg não está mais disponível. A função
       error_get_last() deve ser utilizada em seu lugar.
       
- 
     
      A capacidade de definir constantes que não diferenciam maiúsculas de minúsculas foi removida. O
      terceiro argumento para a função define() não pode ser mais true.
 
- 
     
      A capacidade de especificar um auto carregamento utilizando a função __autoload() foi
      removida. A função spl_autoload_register() deve ser utilizada em seu lugar.
      
- 
     
      O argumento errcontextnão será mais usado para manipulação de erros personalizados
      definido com a função set_error_handler().
 
- 
     
      A função create_function() foi removida. Ao invés disso, funções anônimas devem ser utilizadas.
      
- 
     
      A função each() foi removida. foreachou ArrayIterator
      devem ser utilizados em seu lugar.
 
- 
     
      Foi removida a capacidade de desvincular this de closures que foram
      criadas a partir de um método, usando Closure::fromCallable() ou
      ReflectionMethod::getClosure().
      
- 
     
      A habilidade de desvincular this de closures que contêm usos de
      this também foi removida.
      
- 
     
      A habilidade de utilizar a função array_key_exists() com objetos foi removida.
      as funções isset() ou property_exists() devem ser usadas em seu lugar.
      
- 
     
      O comportamento da função array_key_exists() com relação ao tipo do parâmetro
      keyagora é consistente com a função isset() e
      acesso normal à arrays. Todos os tipos de chave agora usam as coerções usuais e as chaves de
      array/objeto lançam um TypeError.
 
- 
     
      Qualquer array com número n em sua primeira posição utilizará
      n+1 em sua próxima chave implícita mesmo se n
      for negativo.
      
      
- 
     
      O nível de error_reporting padrão agora é E_ALL. Anteriormente excluíaE_NOTICEeE_DEPRECATED.
 
- 
     
      display_startup_errors agora é habilitado por
      padrão.
      
- 
     
      Usar parent dentro de uma classe sem pai agora produzirá um erro fatal
      em tempo de execução.
      
- 
     
      O operador @não irá mais silenciar erros fatais
      (E_ERROR,E_CORE_ERROR,E_COMPILE_ERROR,E_USER_ERROR,E_RECOVERABLE_ERROR,E_PARSE). Manipuladores de erros que
      esperam que error_reporting seja0quando@é usado, devem
      ser ajustados para usar uma verificação de máscara:
 
       
<?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;
 }
 // ...
 }
 ?>
 
 
      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 display_errors=Offseja usada em conjunto com o log de erros.
 
- 
     
      #[não é mais interpretado como o início de um comentário,
      já que esta sintaxe é utilizada agora para atributos.
 
- 
     
      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.
      
      
- 
     
      A precedência dos operadores de concatenação foi modificada em relação ao bitshifts tanto na adição
      como na subtração.
      
       
<?php
 echo "Sum: " . $a + $b;
 // Era interpretado como:
 echo ("Sum: " . $a) + $b;
 // e passa a ser interpretado como:
 echo "Sum:" . ($a + $b);
 ?>
 
 
- 
     
      Argumentos com um valor padrão que avaliam nullem tempo de execução, não irão mais marcar
      o tipo do parâmetro como implícito. Um tipo explícito nulo, ou explicitamentenullcomo argumento padrão
      deve ser usado em seu lugar.
 
       
<?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) {}
 ?>
 
 
- 
     
      Uma série de avisos foram convertidos para exceções do tipo Error:
      
       
       - 
        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.
       
- 
        A tentativa de anexar um elemento a um array para a qual a chave PHP_INT_MAX
        já está em uso.
       
- 
        Tentar usar um tipo inválido (array ou objeto) como uma chave de array ou
        deslocamento de string.
       
- A tentativa de escrever em um índice de array de um valor escalar.
- Tentar descompactar um não-array/Traversable.
- 
        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.
       
- 
        Passar o número errado de argumentos para uma função sem argumento variadic
        ira lançar uma exceção ArgumentCountError.
       
- 
        Passar tipos contáveis inválidos para count() irá lançar
        uma exceção TypeError.
       
 
      Uma série de notificações foram convertidas em avisos:
      
       
       - A tentativa de leitura em uma variável não definida.
- A tentativa de leitura em uma propriedade não definida.
- A tentativa de leitura em uma chave de array não definido.
- A tentativa de leitura em uma propriedade de um não-objeto.
- A tentativa de acesso em um índice de array em um não-array.
- A tentativa de conversão de um array para uma string.
- A tentativa de usar um resource como uma chave de array.
- A tentativa de usar null, um booleano ou um número de ponto flutuante(float) como uma posição em uma string.
- A tentativa de leitura em uma posição fora dos limites de uma string.
- A tentativa de atribuir uma string vazia a uma posição de uma string.
 
- 
     
      A tentativa de atribuir múltiplos bytes em uma posição de uma string agora emite um aviso.
      
- 
     
      Caracteres inesperados no código fonte (como bytes NUL fora de strings) agora irá resultar em uma
      exceção ParseError em vez de um aviso do compilador.
      
- 
     
      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.
      
- 
     
      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 Error
      "Argument cannot be passed by reference".
      
- 
     
      Alguns alertas do tipo "Only variables should be passed by reference" foram convertidas para
      exceções do tipo "Argument cannot be passed by reference"
      
- 
     
      O nome gerado para classes anônimas foi modificado. Agora, inclui o nome da primeira classe ou
      interface:
      
       
<?php
 new class extends ParentClass {};
 // -> ParentClass@anonymous
 new class implements FirstInterface, SecondInterface {};
 // -> FirstInterface@anonymous
 new class {};
 // -> class@anonymous
 ?>
 
 
      O nome mostrado acima ainda é seguido por um byte NUL e um sufixo único.
      
- 
     
      As referências de método de traits não absolutas em adaptações de alias de traits agora precisam ser
      inequívocas:
      
       
<?php
 class X {
 use T1, T2 {
 func as otherFunc;
 }
 function func() {}
 }
 ?>
 
 
      Se T1::func()eT2::func()existem, este código anteriormente era
      aceito de forma silenciosa e func assumia referência aT1::func. Agora irá gerar um
      erro fatal, eT1::funcouT2::funcprecisam ser
      escritos explicitamente.
 
- 
     
      A assinatura de métodos abstratos definido nas características agora é verificada no método de implementação
      da classe:
      
       
<?php
 trait MyTrait {
 abstract private function neededByTrait(): string;
 }
 
 class MyClass {
 use MyTrait;
 
 // Erro por conta do retorno desalinhado.
 private function neededByTrait(): int { return 42; }
 }
 ?>
 
 
- 
     
      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.
      
- 
     
      Os empacotadores de fluxo data://não podem mais ser writable (gravável), indo
      de encontro ao comportamento documentado.
 
- 
     
      Os operadores aritméticos e bitwise (bit a bit) +,-,*,/,**,%,<<,>>,&,|,^,~,++,--irão agora apresentar um TypeError 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+, que permanece suportada.
 
- 
     
      A conversão de float para string agora sempre terá o mesmo comportamento, independentemente da localidade.
      
       
<?php
 setlocale(LC_ALL, "de_DE");
 $f = 3.14;
 echo $f, "\n";
 // Anteriormente: 3,14
 // Agora:         3.14
 ?>
 
 
      Veja as funções printf(), number_format() e
      NumberFormatter() para customizar a formatação de números.
      
      
- 
     
      O suporte para chaves (curly braces), cujo uso para acesso de deslocamento estava descontinuado, foi removido.
      
       
<?php
 // Ao invés de:
 $array{0};
 $array{"key"};
 // Usar:
 $array[0];
 $array["key"];
 ?>
 
 
- 
     
      Aplicar o modificador final ou método privado agora irá produzir um aviso, a menos que o método
      seja o construtor.
      
      
- 
     
      Se um objeto construtor chama a função exit(), o objeto destrutor não será chamado.
      Isto vai de encontro ao comportamento que o construtor lança.
      
- 
     
      Nomes de Namespace não podem mais conter espaços em branco: Enquanto Foo\Barserá reconhecido
      como um nome de Namespace,Foo \ Barnã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:new\xagora é o mesmo queconstant('new\x'),
      e nãonew \x().
 
- 
     
      Os ternários aninhados agora exigem parênteses explícitos.
      
      
- 
     
      debug_backtrace() e Exception::getTrace() 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.
      
- 
     
      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:
      
       
       - A função is_numeric()
- Comparações string a string 
- Declaração de tipos
- Operações de incremento e decremento
 
      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 E_NOTICE"A non
      well-formed numeric value encountered" agora emitirão umE_WARNING"A
      non-numeric value encountered" e todas as strings que emitiram umE_WARNING"A
      non-numeric value encountered" agora lançarão um erro
      TypeError. Isso afeta principalmente:
 
       
       - Operações aritméticas
- Operações bit a bit
 
      Esta mudança do E_WARNINGpara TypeError também afeta oE_WARNING"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.
 
- 
     
      Métodos mágicos agora podem ter argumentos e retornar tipos verificados se eles foram declarados.
      As assinaturas devem corresponder à seguinte lista:
      
       
       - __call(string $name, array $arguments): mixed
- __callStatic(string $name, array $arguments): mixed
- __clone(): void
- __debugInfo(): ?array
- __get(string $name): mixed
- __invoke(mixed $arguments): mixed
- __isset(string $name): bool
- __serialize(): array
- __set(string $name, mixed $value): void
- __set_state(array $properties): object
- __sleep(): array
- __unserialize(array $data): void
- __unset(string $name): void
- __wakeup(): void
 
- 
     
      As chaves do array passados para a função call_user_func_array() agora podem ser interpretadas
      como nomes de parâmetros, em vez de serem silenciosamente ignoradas.
      
- 
     
      A declaração da função chamada assert()dentro de um namespace não é
      mais permitida e gera umE_COMPILE_ERROR.
      A função assert() 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.