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?
Dodaj komentarz