Nowości w PHP 8.4

​PHP 8.4, wydane 21 listopada 2024 roku, wprowadza szereg nowości i usprawnień, które znacząco wpływają na codzienną pracę programistów PHP. Poniżej przedstawiam kluczowe zmiany, które warto znać.​

1. Property Hooks

Jedną z najbardziej oczekiwanych funkcji w PHP 8.4 są property hooks. Pozwalają one na definiowanie niestandardowego zachowania podczas odczytu lub zapisu właściwości klasy, eliminując potrzebę stosowania metod magicznych __get i __set. Dzięki temu kod staje się bardziej czytelny i mniej podatny na błędy.

class Uzytkownik {
    private bool $zmodyfikowano = false;

    public function __construct(
        private string $imie,
        private string $nazwisko
    ) {}

    public string $pelneImie {
        get => $this->imie . ' ' . $this->nazwisko;
        set {
            [$this->imie, $this->nazwisko] = explode(' ', $wartosc, 2);
            $this->zmodyfikowano = true;
        }
    }
}

W powyższym przykładzie, dostęp do właściwości $pelneImie automatycznie wywołuje odpowiednie haki get lub set, co upraszcza zarządzanie danymi w klasie.

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

PHP 8.4 wprowadza również możliwość definiowania różnych poziomów widoczności dla odczytu i zapisu właściwości, co zwiększa elastyczność w projektowaniu API klas.

class KontoBankowe {
    public private(set) float $saldo = 0.0;

    public function wplac(float $kwota): void {
        $this->saldo += $kwota;
    }
}

W tym przypadku $saldo jest publicznie dostępne do odczytu, ale może być modyfikowane tylko wewnątrz klasy.

3. Nowe Funkcje do Pracy z tablicami

W nowej wersji dodano kilka przydatnych funkcji ułatwiających operacje na tablicach:​

  • array_find(): zwraca pierwszy element spełniający podany warunek.​
  • array_find_key(): zwraca klucz pierwszego elementu spełniającego warunek.
  • array_any(): sprawdza, czy przynajmniej jeden element spełnia warunek.​
  • array_all(): sprawdza, czy wszystkie elementy spełniają warunek.​

Przykład użycia array_find():

$liczby = [1, 2, 3, 4, 5];
$parzysta = array_find($liczby, fn($n) => $n % 2 === 0); // Zwróci 2

4. Instancjonowanie klasy bez nawiasów

PHP 8.4 pozwala na wywoływanie metod na nowo tworzonych obiektach bez konieczności używania dodatkowych nawiasów, co poprawia czytelność kodu.

$uzytkownik = new Uzytkownik()->ustawImie('Jan')->ustawNazwisko('Kowalski');

Wcześniej konieczne było użycie nawiasów: (new Uzytkownik())->ustawImie('Jan').

5. Nowe funkcje do pracy z ciągami znaków

Dodano również funkcje mb_trim(), mb_ltrim() i mb_rtrim(), które działają analogicznie do ich odpowiedników bez prefiksu mb_, ale obsługują wielobajtowe ciągi znaków, co jest szczególnie przydatne w aplikacjach obsługujących różne języki.