PHP 8.2: Czego się spodziewać (Przewodnik dla programistów – Zaktualizowany)

by Jason Cosper
PHP 8.2: Czego się spodziewać (Przewodnik dla programistów – Zaktualizowany) thumbnail

PHP 8.2 ma zostać wydany w listopadzie tego roku, a najnowsza stabilna wersja to PHP 8.1.5. Mimo że to jeszcze początek procesu, pojawiły się mieszane opinie na temat kompatybilności PHP 8.2 z rdzeniem WordPressa, wtyczkami i motywami.

Jednak wiedza, czego się spodziewać, może pomóc Ci przygotować się na najnowszą wersję PHP. Poznając nowe funkcje oraz te, które będą wycofywane, możesz zrozumieć, jak aktualizacja może wpłynąć na rozwój. Ta wiedza może również pomóc Ci przygotować się na ostateczne wydanie.

W tym poście podsumujemy najnowsze wersje PHP. Następnie omówimy, co nowego w PHP 8.2 i przedyskutujemy harmonogram wydań. Zacznijmy!

Przegląd Wersji PHP

PHP jest głównym językiem programowania WordPressa. Odgrywa kluczową rolę w przekształcaniu danych z bazy danych na strony internetowe HTML dla odwiedzających Twoją stronę.

Jako właściciel strony internetowej lub deweloper, prawdopodobnie jesteś już zaznajomiony z wagą aktualizacji twojego rdzenia WordPress, motywów i pluginów. Jednakże, równie krytyczne jest utrzymanie aktualności twojego PHP.

Obecnie WordPress zaleca używanie co najmniej PHP 7.4. Starsze wersje PHP nie otrzymują już aktywnego wsparcia dla aktualizacji bezpieczeństwa i poprawek błędów. Dlatego aktualizacja do najnowszej stabilnej wersji PHP może skutkować lepszym bezpieczeństwem strony, zwiększoną wydajnością i wyższym poziomem wsparcia (podkreślamy stabilną, ponieważ część z ponad 60 000 Plugins/plugin WordPressa nie jest jeszcze w pełni kompatybilna z PHP 8.0, więc warto podchodzić do tych aktualizacji z pewną ostrożnością).

PHP 7.4 wprowadziło właściwości z typami, separator numeryczny z podkreślnikiem oraz różne ulepszenia. Od tego czasu wydano kilka kolejnych wersji PHP.

PHP 8.0, wydane w listopadzie 2020, przyniosło kilka kluczowych funkcji. Oprócz ulepszeń składni i wydajności, wydanie zawierało:

  • Nazwane parametry
  • Składnia dopasowania
  • Typy Unii
  • Promocja właściwości konstruktora
  • JIT (który wpływa na sposób wykonania kodu źródłowego przez PHP)

Rok później pojawiła się PHP 8.1, najnowsza główna wersja PHP. Ta aktualizacja zawiera znaczące funkcje, takie jak:

  • Typy przecięcia
  • Właściwości tylko do odczytu
  • Wyliczenia
  • Fibry
  • Typ zwracający nigdy

Utrzymywanie najnowszych wersji PHP może pomóc zwiększyć wydajność i bezpieczeństwo Twojej strony internetowej. Jednak ważne jest, aby wiedzieć, jakich zmian można się spodziewać przed aktualizacją. Jeśli jesteś zainteresowany testowaniem obecnego stanu PHP 8.2, możesz to zrobić za pośrednictwem GitHuba.

Co nowego w PHP 8.2

PHP 8.2 ma zostać wydane pod koniec 2022 roku. Oto aktualny harmonogram wydań, z Ogólną Dostępnością (GA) zaplanowaną na 24 listopada 2022 roku:

  • 9 czerwca: Alpha 1
  • 23 czerwca: Alpha 2
  • 7 lipca: Alpha 3
  • 19 lipca: Zamrożenie funkcji
  • 21 lipca: Beta 1
  • 4 sierpnia: Beta 2
  • 18 sierpnia: Beta 3
  • 1 września: Kandydat na wydanie 1
  • 15 września: Kandydat na wydanie 2
  • 29 września: Kandydat na wydanie 3
  • 13 października: Kandydat na wydanie 4
  • 27 października: Kandydat na wydanie 5
  • 10 listopada: Kandydat na wydanie 6
  • 24 listopada: GA

Zgodnie z oficjalną dokumentacją na stronie PHP, powinno pojawić się kilka nowych funkcji oraz przestarzałych funkcji. Przyjrzyjmy się niektórym z nich!

Typy Formy Normalnej Alternatywnej (DNF)

PHP 8.2 wprowadzi nową funkcję typów w Postaci Normalnej Rozłącznej (DNF). DNF to ustandaryzowany sposób organizowania wyrażeń boolowskich — konkretnie, w serię OR połączonych przez AND. Gdy DNF jest stosowane do deklaracji typów, umożliwia standardowy sposób zapisywania połączonych typów Unii i Przecięcia, które parser może obsłużyć.

Nowa funkcja mysqli_execute_query i metoda mysqli::execute_query

Uruchamianie parametryzowanych zapytań MySQLi będzie łatwiejsze w PHP 8.2, dzięki nowej funkcji mysqli_execute_query($sql, $params) i metodzie mysqli::execute_query.

To jeszcze bardziej zmniejszy złożoność używania zparametryzowanych zapytań, co ułatwi deweloperom odejście od mysqli_query() oraz niebezpiecznego/ryzykownego escapowania wartości użytkownika.

Pobierz właściwości enum w wyrażeniach const

Zgodnie z RFC, „To RFC proponuje umożliwienie użycia ->/?-> do pobierania właściwości enumeracji w stałych wyrażeniach. Głównym motywem tej zmiany jest umożliwienie pobierania właściwości nazwy i wartości w miejscach, gdzie obiekty enumeracji nie są dozwolone, jak klucze tablic.”

Nowe Losowe Rozszerzenie

PHP 8.2 wprowadza nowe rozszerzenie PHP o nazwie random. Organizuje i konsoliduje istniejącą funkcjonalność PHP związaną z generacją liczb losowych. Wprowadza także serię struktur klas PHP i klas wyjątków, aby zapewnić szczegółowe opcje dla generatorów liczb losowych oraz obsługę wyjątków.

Rozszerzenie random jest dołączone do PHP i nie ma opcji konfiguracji w czasie kompilacji ani w czasie działania, aby wyłączyć rozszerzenie random. Rozszerzenie random będzie zawsze dostępne w PHP 8.2 i późniejszych wersjach.

Nowa funkcja curl_upkeep

PHP 8.2 dodaje nową funkcję do rozszerzenia Curl o nazwie curl_upkeep. Funkcja curl_upkeep wywołuje curl_easy_upkeep() w libcurl, która jest podstawową biblioteką C, z której korzysta rozszerzenie Curl PHP.

Funkcja curl_upkeep() wykonuje pracę, która utrzymuje połączenie Curl przy życiu. Jednak nie każdy typ połączenia, z którym integruje się Curl, obsługuje utrzymanie połączenia. Obecnie tylko połączenia HTTP/2 to wspierają.

Nowa funkcja ini_parse_quantity

ini_parse_quantity to nowa funkcja, która zostanie dodana do PHP w wersji PHP 8.2. Analizuje dowolny rozmiar danych rozpoznawany przez wartości INI PHP (takie jak 56K, 256M lub 1G), a następnie zwraca rozmiar danych w bajtach. Może być przydatna podczas analizowania istniejących lub dostarczonych wartości INI w aplikacji PHP. Jednakże, nie rozpoznaje sufiksów IEC dla rozmiarów danych, takich jak MB, MiB czy GB, i nie nadaje się do konwertowania standardowych wartości rozmiarów danych na bajty.

Nowa funkcja memory_reset_peak_usage

PHP 8.2 będzie zawierać nową funkcję o nazwie memory_reset_peak_usage. Zresetuje ona maksymalne zużycie pamięci zwracane przez funkcję memory_get_peak_usage.

Ta funkcja będzie przydatna w przypadkach, które wymagają wywołania akcji kilka razy i zapisania szczytowego użycia pamięci każdej iteracji. Programiści będą mogli użyć tej nowej funkcji do zresetowania szczytowego użycia pamięci w dowolnym momencie życia żądania.

Otrzymuj treści bezpośrednio do swojej skrzynki odbiorczej

Zapisz się teraz, aby otrzymywać wszystkie najnowsze aktualizacje bezpośrednio do swojej skrzynki odbiorczej.

Klasy tylko do odczytu

Wprowadzone w PHP 8.1, właściwości tylko do odczytu zostaną rozszerzone w PHP 8.2 o dodanie składniowego cukru, aby wszystkie właściwości klasy były od razu tylko do odczytu:

readonly class Post
{
public function __construct(
public string $title,
public Author $author,
public string $body,
public DateTime $publishedAt,
) {}
}

To zapobiegnie dodawaniu dynamicznych właściwości do klas.

Null, True i False jako samodzielne typy

W PHP 8.2 typ zwracany false będzie dostępny jako samodzielny typ, a nie tylko jako typ unii, gdy wystąpi błąd, co jest już możliwe:

function alwaysFalse(): false
{
return false;
}

To samo dotyczy typu null. Na przykład, jako samodzielny typ, w przeciwieństwie do wcześniej, NullPost::getAuthor() będzie mógł zwracać tylko null.

PHP 8.2 również pozwala na true jako samodzielny typ.

Wycofaj Dynamiczne Właściwości

Dynamiczne właściwości zostaną wycofane w PHP 8.2, co spowoduje wystąpienie ErrorException w PHP 9.0. Te właściwości są ustawiane na obiekcie:

class Post
{
public string $title;
}

// …

$post->name = 'Nazwa';

Dynamiczne właściwości zapewniają elastyczność podczas tworzenia klas (np. obiekty wartości) bez ścisłej deklaracji klasy. Ich wycofanie prawdopodobnie stanowić będzie problem dla programistów, którzy polegają na dynamicznych właściwościach, ponieważ skłoni ich to do bardziej statycznej analizy. Z tego powodu niektórzy programiści obawiają się tej zmiany w PHP 8.2.

Jednakże klasy używające __get i __set nadal będą obsługiwać właściwości dynamiczne, podobnie jak obiekty stdClass.

Alternatywnie, deweloperzy mogą użyć nowego #[AllowDynamicProperties]attribute, zadeklarowanego w globalnej przestrzeni nazw, na klasach do tych właściwości:

#[AllowDynamicProperties]
class User() {}
$user = new User();
$user->foo = 'bar';

Mimo że nie jest to zalecane, kolejną opcją jest wyłączenie ostrzeżeń o przestarzałości.

Nowy Modyfikator /n

PHP 8.2 będzie zawierać wsparcie dla /n (bez przechwytywania) modyfikatora w rodzinie funkcji preg_*. Gdy użyty, żadne grupy z meta-znakami () nie będą przechwytywać, poza grupami nazwanymi. Zasadniczo wynik jest taki sam, jak oznaczenie każdej grupy jako nieprzechwytującej.

Przyczyną tej zmiany jest to, że modyfikator upraszcza skomplikowane wyrażenia regularne dla wielu grup. Zamiast oznaczać każdą grupę jako nieprzechwytującą, deweloperzy mogą oznaczyć wszystkie grupy jako nieprzechwytujące. Następnie mogą wybrać i nazwać konkretne grupy, które muszą przechwytywać.

Usuwaj Parametry w Śladach Zwrotnych

Wielu programistów korzysta z usług śledzących stosy wywołań i błędy produkcyjne z baz kodów. Te usługi mogą powiadomić użytkowników, jeśli i kiedy coś pójdzie nie tak. Na przykład śledzenie stosów wywołań jest pomocne podczas debugowania aplikacji.

Jednakże, czasami ślady stosu mogą zawierać wrażliwe informacje, takie jak nazwy użytkowników i hasła. PHP 8.2 będzie zawierać #[SensitiveParameter] atrybut, który zapobiegnie uwzględnieniu tych informacji w śladach stosu, gdy coś pójdzie nie tak:

function test(
$foo,
#[SensitiveParameter] $bar,
$baz
) {
throw new Exception('Błąd');
}

test('foo', 'bar', 'baz');

PHP 8.2 będzie używać wrażliwych parametrów do redagowania prywatnych informacji ze śladów stosu, czyniąc je bardziej bezpiecznymi. Parametry te zapewniają, że dane nie zostaną zapisane w logach błędów. Zwróć uwagę, że ten atrybut będzie dostępny tylko do użytku na parametrach.

Przestarzała interpolacja ciągu ${}

Istnieje wiele sposobów na osadzanie zmiennych w ciągach znaków w PHP. Jednak PHP 8.2 przestanie wspierać dwie metody. Pierwsza to użycie ${} w ciągach znaków:

"Witaj ${world}";

Drugim sposobem jest użycie ${} (zmienne zmienne):

"Witaj ${(world)}";

To prawdopodobnie nie będzie znaczącym problemem dla deweloperów, ponieważ dwie najpopularniejsze metody interpolacji ciągów nadal będą działać.

Przestarzałe Częściowo Wspierane Wywołania

Kolejna przestarzała zmiana będzie dotyczyć częściowo wspieranych obiektów wywoływalnych. Istnieje wiele sposobów na stworzenie obiektu wywoływalnego w PHP. Można go wywołać albo z parametrami, albo bez, używając składni $callable(), funkcji user_call_func(/a_array), lub używając funkcji z callbackiem.

Przestarzałe wzorce wywołań obejmują następujące:

$callable = "self::method";
$callable = "parent::method";
$callable = "static::method";
$callable = ["self", "method"];
$callable = ["parent", "method"];
$callable = ["static", "method"];
$callable = ["MyClass", "MyParentClass::myMethod"];
$callable = [new MyClass(), "MyOtherClass::myMethod"];

Od wersji PHP 8.2, wywołanie któregokolwiek z powyższych spowoduje wyświetlenie następującego komunikatu o przestarzałości:

class Test {
public static function myMethod(): void {
echo "Called";
}
public static function call(): void {
$callable = 'self::myMethod';
call_user_func($callable);
}
}
$callable = Test::call();
// "Wywołane";

Jednak przekazywanie tych obiektów wywoływalnych do funkcji is_callable lub używanie ich z typami parametrów callable nie spowoduje wygenerowania komunikatu o przestarzałości. Aby zapobiec pojawieniu się powiadomienia o przestarzeniu, programiści mogą zamiast tego przekonwertować słowa kluczowe parent, self i static w kodzie wywoływalnym na odpowiednie nazwy klas za pomocą magicznej metody::class.

Część powodów zmiany polega na umożliwieniu stosowania wywoływalnych do typizowanych właściwości. Sprawia to, że są one mniej zależne od kontekstu.

MySQLi nie może już być kompilowany z libmysql

W przeszłości PHP obsługiwało dwie biblioteki do łączenia baz danych MySQL: mysqlnd i libmysql. Od PHP 5.4, domyślną biblioteką jest mysqlnd. Jednakże możliwe było kompilowanie MySQLi przez rozszerzenia.

Począwszy od PHP 8.2, kompilowanie rozszerzenia MySQLi z libmysql nie będzie wspierane. Próba jego wykonania skutkować będzie błędem konfiguracji:

./configure --with-mysqli=FOO

Łączenie mysqli z zewnętrzną biblioteką nie jest już obsługiwane

To prawdopodobnie nie spowoduje żadnych znaczących błędów dla programistów. Jednakże, dwie najważniejsze funkcje obsługiwane przez libmysql, których nie ma w mysqlnd, to obsługa automatycznego ponownego łączenia oraz uwierzytelnianie za pomocą LDAP i SASL.

Aktualizuj swoją wersję PHP WordPress

Jako programista, niezbędne jest testowanie swojego kodu pod kątem nadchodzących wersji PHP. W tym przypadku programiści powinni zacząć testować swój kod pod kątem PHP 8.2 jak najszybciej, aby zapewnić, że twój kod nie zakłóci działania stron użytkowników podczas aktualizacji.

Obraz tła reklamy

Idealne środowisko rozwojowe

Dbamy o to, by Twoja strona była szybka, bezpieczna i zawsze dostępna, aby Twoi odwiedzający mogli Ci ufać. Plany zaczynają się już od $1.99/mies.

Wybierz Swój Plan