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.
