Nowości w PHP 8.4

Data aktualizacji: 17.05.2025r. Autor: Bartosz Stefanicki.

Nowości w PHP 8.4

PHP w wersji 8.4 zostało wydane 21 listopada 2024 r. Sprawdźmy, co ciekawego przygotował dla nas zespół PHP tym razem.

1. Property Hooks – getter i setter w jednym miejscu

Nowy mechanizm property hooks pozwala powiązać logikę odczytu (get) i zapisu (set) bezpośrednio z deklaracją właściwości, bez konieczności pisania osobnych metod:

class Person
{
    private string $first;
    private string $last;

    public function __construct(string $first, string $last)
    {
        $this->first = $first;
        $this->last  = $last;
    }

    public string $fullName {
        get => $this->first.' '.$this->last; // wirtualna właściwość
        set => [$this, 'setFullName']; // opcjonalny setter
    }
}

2. Asymetryczna widoczność właściwości

Od 8.4 można przypisać inny poziom widoczności do odczytu i zapisu:

class Book
{
    public private(set) string $title; // publiczne czytanie, prywatny zapis

    public function __construct(string $title)
    {
        $this->title = $title; // dozwolone wewnątrz klasy
    }
}

$book = new Book('Test');
echo $book->title; // OK
$book->title = 'Nowa wartość'; // Fatal error

Takie podejście poprawia enkapsulację bez konieczności używania klas readonly.

3. Nowa rodzina funkcji array_ – szukanie i testowanie

PHP 8.4 dodaje cztery długo wyczekiwane funkcje do pracy z tablicami:

$numbers = [1, 3, 6, 7, 9];

array_any($numbers, fn($n) => $n % 2 === 0); // true
array_all($numbers, fn($n) => $n < 10); // true
array_find($numbers, fn($n) => $n > 5); // 6
array_find_key($numbers, fn($n) => $n === 7); // 3 (indeks)

Dzięki nim wiele popularnych zadań (pierwsze dopasowanie, any/ all) nie wymaga już kombinacji array_filter + pętla.

4. Parser HTML5 i nowe API DOM

Stara klasa DOMDocument zostaje, ale 8.4 wprowadza całkiem nowy, zgodny ze specyfikacją parser HTML5 w przestrzeni nazw Dom\*:

$doc  = new Dom\HTMLDocument();
$doc->loadHTML($html);

foreach ($doc->querySelectorAll('a[href]') as $a) {
    echo $a->href.PHP_EOL;
}

Nowe klasy (Dom\HTMLDocument, Dom\XMLDocument) są zgodne z DOM Living Standard i wspierają wygodne selektory CSS.

5. Łańcuchowanie new bez nawiasów

Koniec z pisaniem (new Foo())->bar() — od 8.4 wystarczy:

$result = new Service()->run();

Zmiana drobna, ale usuwa irytujące nawiasy przy fluent-API i bliżej upodabnia składnię PHP do współczesnych języków skryptowych.

Pozostałe nowości

  • round() - 4 nowe tryby zaokrąglania przez enum RoundingMode,
  • mbstring - mb_trim, mb_ltrim, mb_rtrim, mb_ucfirst, mb_lcfirst,
  • Opcache/JIT - uproszczona konfiguracja, lepsza wydajność,
  • [#[Deprecated]] - atrybut do oznaczania elementów wycofywanych.

Zobacz także kalendarz wsparcia wersji PHP.

Kategorie: PHP + MySQL. Tagi: #php, #serwer. Źródło obrazków: Pixabay, Font awesome.

Zobacz także

Komentarze