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 enumRoundingMode
,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.