O documento discute as principais mudanças e melhorias propostas para as versões futuras do PHP, incluindo PHP 7.4 e PHP 8.0. Algumas RFCs aprovadas incluem propriedades tipadas, referências fracas, pré-carregamento sem sobrecarga e arrays começando com índices negativos. O documento também explica como o PHP evolui através do processo de RFCs e como outras linguagens como Java, Python e Rust fazem processo semelhante de melhoria.
20. PHP 4.3
A nova versão 2.5 do Wordpress lançada em 29 de março de
2008 mudou os requisitos mínimos da versão 4.2 para 4.3 do
PHP.
Último patch da versão 4.3 do PHP lançado em 31 de março
de 2005.
21. PHP 4.3
A nova versão 2.5 do Wordpress lançada em 29 de março de
2008 mudou os requisitos mínimos da versão 4.2 para 4.3 do
PHP.
Último patch da versão 4.3 do PHP lançado em 31 de março
de 2005.
11 anos
14 anos
( https://codex.wordpress.org/Version_2.5 )
( https://www.php.net/releases#4.3.11 )
26. Internals
Mailing List
A medium volume list for those
who want to help out with the
development of PHP
( https://www.php.net/mailing-lists.php#internals )
29. RFC
● Introdução
● Proposta
● Quebras de
compatibilidade com as
versões anteriores
● Limitações
● Versão alvo
● Impacto
● Pull Request
● Comparações /
Referências
● O que mais o autor achar
válido
42. Abolish Narrow Margins
Proposta para abolir votações com o
critério “50% + 1 voto”.
( Criado em 17 de novembro de 2016, votação encerrada em 22 de fevereiro de
2019. )
https://wiki.php.net/rfc/abolish-narrow-margins
43. Abolish Short Votes
Proposta para abolir períodos de votação
menores do que duas semanas.
(Criado em 21 de março de 2019, votações terminaram em: 22 de abril de 2019)
https://wiki.php.net/rfc/abolish-short-votes
46. ● A extensão permite o acesso a
sistemas de banco de dados
baseados no InterBase e
sistemas baseados no Firebird.
● Existe uma extensão PDO para
acessar os mesmos sistemas de
banco de dados com um
back-end PDO, no entanto, para
esta RFC, apenas a extensão
ext/interbase está em questão.
Remover o InterBase e WDDX do Core
● Deprecate and remove
ext/interbase
● Unbundle ext/wddx
● A extensão InterBase para PHP
(ext/interbase) é uma das mais
antigas extensões de banco de
dados que atualmente residem
no Core.
47. ● weakrefs
● Referências fracas permitem ao
programador manter uma
referência a um objeto que não
impede que o objeto seja
destruído;
Referências Fracas
● Eles são úteis para implementar
estruturas semelhantes a cache.
Eles são atualmente suportados
no PHP por extensão.
48. Propriedades Tipadas 2.0
● Typed Properties 2.0
Com a introdução de tipos
escalares e tipos de retorno, o
PHP 7 aumentou muito o poder
do sistema de tipos do PHP.
● No entanto, não era possível
declarar os tipos de
propriedades de classe, forçando
os desenvolvedores a usar os
métodos getter e setter para
impor contratos de tipo.
● Isso requer um boilerplate
desnecessário, tornando o uso
menos ergonômico e
prejudicando o desempenho.
● Esta RFC resolve esse problema
introduzindo suporte para
declarações de tipo de
propriedade.
53. // The following lines are doing the same
$this->request->data['comments']['user_id'] =
$this->request->data['comments']['user_id'] ?? 'value';
// Instead of repeating variables with long names,
// the equal coalesce operator is used
$this->request->data['comments']['user_id'] ??= 'value';
54. Pré-carregamento sem sobrecarga
● Preloading
● Pré-carregar funções e classes
do PHP uma vez e usá-las no
contexto de qualquer solicitação
futura sem sobrecarga.
● Nova diretiva do php.ini
“opcache.preload”
55. ext/hash sempre disponível
● Always available hash extension
● Propõe manter a extensão hash
sempre disponível no PHP assim
como as extensões `date`, `spl` e
`pcre`.
56. ● Password Hash Registry
● Torna os mecanismos usado por
password_hash/verify/etc…
extensível por outros módulos
Mudanças no password_hash
58. Reflection para Referências
● Reflection for references
● Bibliotecas especializadas que
executam operações como
dumping, clonagem ou
comparação exigem a
capacidade de raciocinar sobre
referências ao PHP.
● Atualmente, o PHP não fornece
APIs para esse propósito,
forçando as bibliotecas a usar
formas indiretas de detectar
referências e igualdades de
referência.
59. Nova serialização personalizada
● New custom object serialization
mechanism
● Introduz novo mecanismo de
serialização de objeto
personalizado para substituir
Serializable
public function
__serialize(): array;
public function
__unserialize(array $data):
void;
60. Covariant Returns and Contravariant Parameters
interface A {
function m(B $z);
}
interface B extends A {
// permitted
function m($z): A;
}
interface X {
function m(Y $z): X;
}
interface Y extends X {
// not permitted but type-safe
function m(X $z): Y;
}
https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters
65. Consistent type errors for internal
functions
Um TypeError será lançado em vez de um Warning se os parâmetros
digitados incorretamente forem passados para uma função, que é uma
alteração incompatível com versões anteriores.
Hoje: método do usuário TypeError e funções internas por padrão lançam
um Warning e retornam null.
https://wiki.php.net/rfc/consistent_type_errors
67. Arrays starting with a negative index
<?php
array(3) {
[-2]=> bool(true)
[0]=> bool(true)
[1]=> bool(true)
}
Atualmente
https://wiki.php.net/rfc/negative_array_index
68. Arrays starting with a negative index
<?php
array(3) {
[-2]=> bool(true)
[-1]=> bool(true)
[0]=> bool(true)
}
Proposto
https://wiki.php.net/rfc/negative_array_index
69. JIT
1. Não dá mais para aumentar a performance
sem usar JIT
2. Em cenários não relacionados com a web o
ganho de memória pode ser útil
3. Com o JIT poderemos desenvolver extensões
usando PHP em vez de C
70. JIT
“it currently doesn't seem to significantly improve real-life apps
like WordPress (with opcache.jit=1235 326 req/sec vs 315
req/sec)”
https://wiki.php.net/rfc/jit