## Lista de alterações da POO

As alterações no modelo de POO do PHP são registradas aqui. Descrições e outras notas relacionadas a estes recursos estão documentadas na documentação do modelo POO.

Versão | Descrição
--- | ---
8.4.0 | Adicionado: suporte para Ganchos de Propriedade.
8.4.0 | Adicionado: suporte para Objetos Lentos.
8.1.0 | Adicionado: suporte ao modificador final para constantes de classe. Além disso, as constantes de interface agora são substituíveis por padrão.
8.0.0 | Adicionado: suporte ao operador nullsafe ?-> para acessar propriedades e métodos em objetos que podem ser nulos.
7.4.0 | Alterado: agora é possível lançar uma exceção dentro de __toString().
7.4.0 | Adicionado: suporte a covariância limitada de tipo de retorno e contravariância de tipo de argumento. O suporte completo à variância só estará disponível se o carregamento automático for usado. Dentro de um único arquivo, apenas referências de tipo não cíclicas são possíveis.
7.4.0 | Adicionado: agora é possível usar tipos nas propriedades da classe.
7.3.0 | Incompatibilidade: o desempacotamento de argumentos com instâncias de Traversable com chaves não-int não é mais suportado. Esse comportamento não era intencional e, portanto, foi removido.
7.3.0 | Incompatibilidade: nas versões anteriores era possível separar as propriedades estáticas atribuindo uma referência. Isso foi removido.
7.3.0 | Alterado: o operador instanceof agora permite literais como o primeiro operando, caso em que o resultado é sempre `false`.
7.2.0 | Descontinuado: a função __autoload() foi descontinuada em favor da função spl_autoload_register().
7.2.0 | Alterado: o seguinte nome não pode ser usado para nomear classes, interfaces ou traits: `object`.
7.2.0 | Alterado: uma vírgula à direita agora pode ser adicionada à sintaxe de agrupamento de use para namespaces.
7.2.0 | Alterado: extensão do tipo de parâmetro. Os tipos de parâmetro de métodos sobrescritos e de implementações de interface agora podem ser omitidos.
7.2.0 | Alterado: métodos abstratos agora podem ser sobrescritos quando uma classe abstrata estende outra classe abstrata.
7.1.0 | Alterado: os nomes a seguir não podem ser usados para nomear classes, interfaces ou traits: `void` e `iterable`.
7.1.0 | Adicionado: agora é possível especificar a visibilidade das constantes de classe.
7.0.0 | Descontinuado: chamadas estáticas a métodos que não são declarados estáticos.
7.0.0 | Descontinuado: construtor no estilo do PHP 4. Ou seja, métodos com o mesmo nome da classe em que eles são definidos.
7.0.0 | Adicionado: a declaração use de grupo: classes, funções e constantes importadas do mesmo namespace agora podem ser agrupadas em uma única declaração use.
7.0.0 | Adicionado: o suporte a classes anônimas foi adicionado via `new class`.
7.0.0 | Incompatibilidade: iterar sobre um object que não seja uma instância de Traversable agora terá o mesmo comportamento que iterar sobre arrays por referência.
7.0.0 | Alterado: definir propriedades (compatíveis) em duas traits não dispara mais um erro.
5.6.0 | Adicionado: o método __debugInfo().
5.5.0 | Adicionado: a constante mágica ::class.
5.5.0 | Adicionado: finally para manipular exceções.
5.4.0 | Adicionado: traits.
5.4.0 | Alterado: se uma classe abstrata definir uma assinatura para o construtor, agora ela será imposta.
5.3.3 | Alterado: métodos com o mesmo nome do último elemento de uma classe com namespace não serão mais tratados como construtores. Esta alteração não afeta classes sem namespace.
5.3.0 | Alterado: classes que implementam interfaces com métodos que possuem valores padrão no protótipo não precisam mais corresponder ao valor padrão da interface.
5.3.0 | Alterado: agora é possível referenciar a classe usando uma variável (por exemplo, `echo $nome_da_classe::CONSTANTE;`). O valor da variável não pode ser uma palavra-chave (por exemplo, `self`, `parent` ou `static`).
5.3.0 | Alterado: um erro de nível `E_WARNING` será emitido se os métodos mágicos de sobrecarga forem declarados estáticos. Também impõe o requisito de visibilidade pública.
5.3.0 | Alterado: antes do PHP 5.3.0, as exceções lançadas na função __autoload() não podiam ser capturadas no bloco catch e resultariam em um erro fatal. Agora as exceções lançadas na função __autoload podem ser capturadas no bloco catch, com uma condição. Se uma exceção personalizada for lançada, a classe de exceção personalizada deve estar disponível. A função __autoload pode ser usada recursivamente para carregar automaticamente a classe de exceção personalizada.
5.3.0 | Adicionado: o método __callStatic.
5.3.0 | Adicionado: suporte a heredoc e nowdoc nas definições de constantes e propriedades de classe. Nota: os valores heredoc devem seguir as mesmas regras que strings com aspas duplas, (por exemplo, sem variáveis dentro).
5.3.0 | Adicionado: Late Static Bindings.
5.3.0 | Adicionado: o método __invoke().
5.2.0 | Alterado: o método __toString() só era chamado quando combinado diretamente com echo ou print. Mas agora, ele é chamado em qualquer contexto de string (por exemplo, em printf() com o modificador `%s`), mas não em outros contextos de tipos (por exemplo, com o modificador `%d`). A partir do PHP 5.2.0, a conversão de objects sem um método __toString para string emitirá um erro de nível `E_RECOVERABLE_ERROR`.
5.1.3 | Alterado: nas versões anteriores do PHP 5, o uso de `var` era considerado descontinuado e emitiria um erro de nível `E_STRICT`. Agora não é mais descontinuado, portanto não emite o erro.
5.1.0 | Alterado: o método estático __set_state() agora é chamado por classes exportadas com a função var_export().
5.1.0 | Adicionado: os métodos __isset() e __unset().

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open