Chegou hoje o principal lançamento do ano da popular linguagem de programação para desenvolvimento web de backend, o PHP 8.2!
Classes para apenas leitura
As propriedades de apenas leitura foram introduzidas no PHP 8.1, mas agora foi adiciona uma facilidade sintática onde em vez de escrever isso:
class Post
{
public function __construct(
public readonly string $title,
public readonly Author $author,
public readonly string $body,
public readonly DateTime $publishedAt,
) {}
}
Podemos escrever isso:
readonly class Post
{
public function __construct(
public string $title,
public Author $author,
public string $body,
public DateTime $publishedAt,
) {}
}
Repare que em vez de escrever readonly
em todas as variáveis, basta definir a propriedade diretamente na classe.
Propriedades dinâmicas
Este aqui pode render a refatoração de alguns códigos: as propriedades dinâmicas agora estão obsoletas e quando lançar o PHP 9, elas não funcionarão mais. Entretanto, classes que implementam __get
e __set
continuarão funcionando.
Extensões de aleatoriedade
O PHP 8.2 adiciona um novo gerador de números aleatórios que corrige vários problemas do anterior: Ele é mais performático, mais seguro, fácil de manter e não depende de uma declaração global, além de diminuir a dificuldade de detectar bugs.
Também há uma nova classe chamada Randomizer
, que é personalizável e permite tornar qualquer coisa aleatória com facilidade.
Mais segurança no Debug
É uma prática comum submeter o código a programas de terceiros que procuram por erros. Este tipo de programa é denominado debugger, mas isto pode comprometer dados sensíveis como senhas, nome de usuário ou outras informações confidenciais, sendo um grande problema de segurança.
Por isso, o PHP 8.2 introduz o atributo sensitive parameters
, que esconde as informações sensíveis de possíveis debuggers maliciosos. Eis um exemplo de como utilizar:
function login(
string $user,
#[\SensitiveParameter] string $password
) {
// …
throw new Exception('Error');
}
login('root', 'root');
Ao executar este código, ele apresenta o erro da seguinte forma:
Fatal error: Uncaught Exception: Error in login.php:8
Stack trace:
#0 login.php(11): login('root', Object(SensitiveParameterValue))
#1 {main}
thrown in login.php on line 8
utf8_encode() e utf8_decode() obsoletos
Mais dois itens obsoletos, ao utilizar utf8_encode() e utf8_decode() , irá retornar o erro:
Deprecated: Function utf8_encode() is deprecated
Deprecated: Function utf8_decode() is deprecated
Estas são apenas algumas das novidades do PHP 8.2, caso queira saber sobre todas as novidades, consulte a documentação oficial!