Wyjaśnienie nowoczesnych funkcji PHP – PHP 8.0 i 8.1

Wyjaśnienie nowoczesnych funkcji PHP – PHP 8.0 i 8.1

Od czasu premiery pod koniec 2020 r. PHP 8 zmienia zasady gry. W tym samouczku omówię wszystkie najnowsze funkcje z rzeczywistymi przykładami, kiedy mogę z nich skorzystać.

Zakochałem się w języku PHP na początku mojej kariery i od tego czasu opowiadam się za nim przy każdej okazji. Jednak od czasu wydania 8.* nie musiałem niczego przesadzać. Zamiast tego mogłem polegać wyłącznie na faktach w języku. Przyjrzyjmy się kilku ważnym funkcjom z wydania PHP 8.0.

Constructor property promotion

To jest jedna z moich najczęściej używanych funkcji 8.0 oszczędziła mi wielokrotnego wciskania entera, aby kod był wizualnie przejrzysty.

// Before PHP 8.0
class Client {
    
    private string $url;
    
    public function __construct(string $url) {
        $this->url = $url;
    }
}

// PHP 8.0

class Client {

    public function __construct(private string $url) {

    }
}

Możemy teraz ustawić właściwości naszych obiektów bezpośrednio w konstruktorze jako argument, zamiast ręcznie je przypisywać. Używam tego prawie cały czas, ponieważ oszczędza to wysiłek, ale także zachowuje właściwości zawarte w konstruktorze – dzięki czemu od razu rozumiesz dużo więcej o swoich obiektach, bez konieczności przewijania.

Union Types

Kolejną fantastyczną funkcją, która została wydana, jest Union Types. W tym miejscu zmienna ze wskazówką typu lub typ zwracany może być jednym lub kilkoma typami. Pomogło to w analizie statycznej, w której możesz mieć warunkowe zwroty w ramach metody. Spójrzmy na przykład.

// Before PHP 8.0
class PostService
{

    public function all(): mixed {
        if (! Auth::check()) {
            return [];
        }
        return Post::query()->get();
    }
}
// PHP 8.0
class PostService
{

    public function all(): array|Collection {
        if (! Auth::check()) {
            return [];
        }
        return Post::query()->get();
    }
}

Nazwane argumenty

To kolejna funkcja, której być może obecnie nadużywam. Uważam, że użycie nazwanych argumentów pozwala nam być deklaratywnymi w naszym kodzie – nie trzeba już zgadywać, co oznacza trzeci parametr tej funkcji w stosunku do bazy kodu. Spójrzmy na inny przykład.

// Before PHP 8.0
class ProcessImage
{
    public static function handle(string $path, int $height, int $width, string $type, int $quality, int $compression): void {
        // logic for handling image processing
    }
}

ProcessImage::handle('/path/to/image.jpg', 500, 300, 'jpg', 100, 5);
// PHP 8.0
class ProcessImage
{
    public static function handle(string $path, int $height, int $width, string $type, int $quality, int $compression): void {
        // logic for handling image processing
    }
}

ProcessImage::handle(
    path: '/path/to/image.jpg',
    height: 500,
    width: 300,
    type: 'jpg',
    quality: 100,
    compression: 5,
);

Jak widać w powyższym przykładzie – niewłaściwe ustawienie wysokości i szerokości przyniosłoby efekty inne niż można by się spodziewać. Ponieważ klasa i implementacja znajdują się tuż obok siebie, jest to stosunkowo łatwe. Teraz wyobraź sobie, że ta metoda pochodzi z pakietu, który zainstalowałeś, który może nie mieć najlepszej dokumentacji – użycie nazwanych argumentów pozwala Tobie i wszystkim innym korzystającym z Twojej bazy kodu zrozumieć kolejność tych argumentów dla metody. Jednak nadal należy tego używać ostrożnie, ponieważ autorzy bibliotek mają tendencję do częstszego zmieniania nazw parametrów i nie zawsze są uważani za przerywanie zmian.

To oczywiście nie jest wyczerpująca lista – to tylko kilka kluczowych rzeczy, które wyróżniają wydawnictwa. Istnieje wiele innych rzeczy, które zostały dodane do PHP 8.0 i 8.1, o których tutaj nie wspomniałem.

W tym artykule nie będę zagłębiał się w PHP 8.2, ponieważ nie został on jeszcze wydany, więc nie sformułowałem jeszcze opinii na temat nowych funkcji – ale obserwuj tę przestrzeń, ponieważ nadchodzi. Nie wspominając już o ulepszeniach już w planowaniu PHP 8.3!

Jaka była twoja ulubiona współczesna funkcja PHP? Co chciałbyś zobaczyć dodane w przyszłych wydaniach?

Udostępnij ten post

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *