Executando verificação de segurança...
10

PHP 8.4 oficialmente lançado cheio de novidades

O PHP 8.4 acaba de ser lançado e trás, além de diversas melhorias da linguagem, novas features para facilitar a vida do desenvolvedor. Entre elas estão: Property Hooks, Asymmetric Property Visibility, Lazy Objects e Class Instantiation without extra parenthesis.

Property Hooks

Inspirada em linguagens como C#, Kotlin e Swift, as property hooks permitem definir os métodos getters e setters diretamente na declaração dos atributos, como no exemplo abaixo:

class User implements Named
{
    private bool $isModified = false;
 
    public function __construct(
        private string $first,
        private string $last
    ) {}
 
    public string $fullName {
        // Override the "read" action with arbitrary logic.
        get => $this->first . " " . $this->last;
 
        // Override the "write" action with arbitrary logic.
        set {
            [$this->first, $this->last] = explode(' ', $value, 2);
            $this->isModified = true;
        }
    }
}

Asymmetric Property Visibility

Agora é possível definir separadamente a visibilidade do get e set das propriedades dos objetos

class Book
{
    public function __construct(
        public private(set) string $title,
        public protected(set) string $author,
        protected private(set) int $pubYear,
    ) {}
}
 
class SpecialBook extends Book
{
    public function update(string $author, int $year): void
    {
        $this->author = $author; // OK
        $this->pubYear = $year; // Fatal Error
    }
}
 
$b = new Book('How to PHP', 'Peter H. Peterson', 2024);
 
echo $b->title; // How to PHP
echo $b->author; // Peter H. Peterson
echo $b->pubYear; // Fatal Error

Lazy Objects

Agora é possível instanciar classes sem informar os parâmetros obrigatórios do construtor, sendo possível fazê-lo mais tarde. Isso permite que os frameworks utilizem ainda mais a injeção de dependência, veja o exemplo abaixo:

class Example
{
    public function __construct(private int $data)
    {
    }

    // ...
}

$initializer = static function (Example $ghost): void {
    // Fetch data or dependencies
    $data = ...;
    // Initialize
    $ghost->__construct($data);
};

Class Instantiation without extra parenthesis

Antes do PHP 8.4, ao instaciar uma classe, era necessário embrulhá-la entre parênteses para poder acessar métodos ou propriedades. Agora, não será mais necessário, tornando o acesso mais simples.

  • Antes PHP 8.4
// Wrapping parentheses are required to access class members
$request = (new Request())->withMethod('GET')->withUri('/hello-world');
  • Após PHP 8.4
// PHP Parse error (<= PHP 8.3): syntax error, unexpected token "->"
$request = new Request()->withMethod('GET')->withUri('/hello-world');

Fontes

Carregando publicação patrocinada...
1
1