Co nowego w PHP 8.2: kompleksowy przegląd

Opublikowany: 2023-10-17
Udostępnij na profilach społecznościowych.

PHP, szeroko używany język skryptowy po stronie serwera, stale ewoluuje, aby sprostać stale zmieniającym się wymaganiom tworzenia stron internetowych. Wydanie PHP 8.2 w listopadzie 2022 roku niesie ze sobą szereg ekscytujących funkcji, ważne wycofanie wersji i istotne poprawki błędów. W tym artykule przyjrzymy się bliżej godnym uwagi aspektom nowości w PHP 8.2, rzucając światło na to, czego programiści mogą oczekiwać od najnowszej wersji.

Spis treści

Nowe funkcje

1. Wyliczenia: wprowadzenie bezpieczeństwa typów

Być może jeden z najbardziej oczekiwanych dodatków do PHP, wersja 8.2 wreszcie wprowadza natywną obsługę wyliczeń (wyliczeń). Wyliczenia pozwalają programistom definiować zestaw nazwanych wartości z jawnymi typami, dodając znaczną warstwę bezpieczeństwa typów do PHP.

Oto prosty przykład działania wyliczeń:

 enum Color { case RED; case GREEN; case BLUE; }

Wyliczenia mogą również mieć powiązane wartości, co czyni je uniwersalnymi w różnych przypadkach użycia. Ta funkcja jest szczególnie korzystna, ponieważ zapewnia czytelność, łatwość konserwacji i mniejszą podatność kodu na błędy wynikające z niewłaściwego użycia stałych lub liczb magicznych.

2. Awans konstruktora: ograniczenie szablonowego kodu

PHP 8.2 wprowadza promocję konstruktorów, funkcję mającą na celu uproszczenie definicji klas i redukcję szablonowego kodu. Dzięki promocji konstruktora możesz deklarować i inicjować właściwości klasy bezpośrednio na liście parametrów konstruktora. Eliminuje to potrzebę oddzielnych deklaracji właściwości, dzięki czemu kod jest bardziej zwięzły i łatwiejszy w utrzymaniu.

 class User { public function __construct( public string $name, public string $email, public ?string $bio = null ) {} }

Promocja konstruktora jest szczególnie cenna w przypadku klas o wielu właściwościach, ponieważ zmniejsza bałagan w bazie kodu.

3. Klasy tylko do odczytu

W PHP 8.2 klasy tylko do odczytu umożliwiają programistom definiowanie klas z właściwościami, które można ustawić tylko raz, zazwyczaj podczas tworzenia obiektu. Gwarantuje to, że właściwości pozostaną niezmienne przez cały okres użytkowania obiektu. Właściwości tylko do odczytu są deklarowane przy użyciu modyfikatora readonly i muszą zostać zainicjowane w konstruktorze klasy.

W PHP 8.2 proces ten zostaje znacznie uproszczony:

 class ReadOnlyClass $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

4. Nazwane argumenty w instrukcjach „uwzględnij” i „wymagaj”.

W PHP 8.2 nazwane argumenty mogą być teraz używane podczas dołączania lub wymagania plików. Ta funkcja zwiększa czytelność kodu, szczególnie w przypadku funkcji akceptujących wiele argumentów.

 include filename: 'my_file.php', once: true;

Podając nazwy tych argumentów, sprawiasz, że Twój kod jest bardziej zrozumiały i zmniejszasz prawdopodobieństwo wprowadzenia błędów z powodu nieprawidłowej kolejności argumentów.

5. Powiadomienia o wycofaniu niejawnych nawiasów

Aby zapewnić spójność i czytelność kodu, w PHP 8.2 wprowadzono uwagi o wycofaniu funkcji i metod wywoływanych bez nawiasów. Chociaż nie jest to jeszcze błąd, służy to jako ostrzeżenie dla programistów, aby zastosowali zalecaną praktykę konsekwentnego używania nawiasów podczas wywoływania funkcji.

 // Deprecated usage myFunction; // Recommended usage myFunction();

Zniechęcając do stosowania ukrytych nawiasów, PHP ma na celu zwiększenie przejrzystości kodu i łatwości konserwacji.

6. Wsparcie dla ukrywania wrażliwych wartości parametrów

PHP zapewnia możliwość monitorowania stosu wywołań w dowolnym stanie programu, co okazuje się szczególnie przydatne przy rozwiązywaniu problemów z aplikacjami. Jednakże w niektórych przypadkach ślady stosu mogą zawierać poufne szczegóły wymagające ukrycia.

W PHP 8.2 zostanie wprowadzony nowy atrybut o nazwie „SensitiveParameter”. Ten atrybut służy do zaciemniania wyświetlania lub rejestrowania wrażliwych danych, gdy aplikacja napotka błędy. W praktyce jego użycie będzie wyglądać następująco:

 function passwords( $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

7. Wprowadzenie funkcji mysqli_execute_query i metody mysqli::execute_query

PHP, wszechstronny język skryptowy do tworzenia stron internetowych, stale ewoluuje, aby zwiększyć jego możliwości i łatwość użycia. W PHP 8.2 programiści mogą spodziewać się wprowadzenia dwóch nowych funkcji: funkcji mysqli_execute_query i metody mysqli::execute_query. Dodatki te mają na celu usprawnienie i uproszczenie interakcji z bazami danych, dzięki czemu praca z bazami danych MySQL jest jeszcze wygodniejsza.

Funkcja mysqli_execute_query

Funkcja mysqli_execute_query to potężny dodatek do rozszerzenia MySQLi w PHP. Jest specjalnie dostosowany do wykonywania zapytań SQL w bazie danych MySQL. Ta funkcja oferuje prosty i skuteczny sposób wysyłania zapytań SQL i pobierania wyników. Oto krótki przykład jego użycia:

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM users WHERE status = ?"; $stmt = $mysqli->prepare($sql); $status = "active"; $stmt->bind_param("s", $status); $result = mysqli_execute_query($stmt); while ($row = $result->fetch_assoc()) { } $stmt->close(); $mysqli->close();

Funkcja mysqli_execute_query usprawnia proces przygotowywania i wykonywania zapytań przy jednoczesnym zachowaniu bezpieczeństwa poprzez wiązanie parametrów.

Metoda mysqli::execute_query

Oprócz nowej funkcji w PHP 8.2 wprowadzono metodę mysqli::execute_query jako część klasy MySQLi. Ta metoda upraszcza wykonywanie zapytań dla programistów, którzy preferują programowanie obiektowe. Oto przykład jego użycia:

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM products WHERE category = ?"; $stmt = $mysqli->prepare($sql); $category = "electronics"; $stmt->bind_param("s", $category); $result = $stmt->execute_query(); while ($row = $result->fetch_assoc()) {} $stmt->close(); $mysqli->close();

Metoda mysqli::execute_query oferuje zorientowane obiektowo podejście do wykonywania zapytań do bazy danych, zapewniając bardziej intuicyjną obsługę programistom preferującym ten styl kodowania.

8. Zezwalaj na stałe w cechach: zwiększanie możliwości ponownego użycia i konserwacji kodu

Cechy są cenną funkcją we współczesnych językach programowania, w tym w PHP, umożliwiając programistom ponowne wykorzystanie kodu w różnych klasach bez potrzeby dziedziczenia. Cechy PHP przede wszystkim dostarczają metod, ale w PHP 8.2 wprowadzono znaczące ulepszenie: możliwość definiowania stałych w ramach cech. Ta funkcja ma na celu poprawę organizacji kodu, możliwości ponownego użycia i konserwacji, zapewniając programistom większą elastyczność w projektowaniu kodu.

Rola cech w PHP

Zanim zagłębimy się w dodawanie stałych do cech, przyjrzyjmy się pokrótce roli cech w PHP. Cechy to mechanizm ponownego wykorzystania kodu w językach z pojedynczym dziedziczeniem, takich jak PHP. Umożliwiają zdefiniowanie zestawu metod, które można ponownie wykorzystać w wielu klasach. Kiedy klasa korzysta z cechy, dziedziczy metody zdefiniowane w tej cesze, zwiększając modułowość kodu i redukując nadmiarowość.

 trait Loggable { public function log($message) { }} class User { use Loggable; public function register() { $this->log('User registered.'); }}

W tym przykładzie cecha Logable zapewnia metodę dziennika, której może używać każda klasa zawierająca tę cechę, co poprawia łatwość konserwacji i organizację kodu.

Stałe w cechach: nowa funkcja

W PHP 8.2 programiści mogą teraz definiować stałe w ramach cech, co nie było możliwe w poprzednich wersjach PHP. Stałe w cechach działają podobnie do stałych w klasach, ale są dostępne w klasach, które korzystają z danej cechy.

 trait Configuration {
const MAX_CONNECTIONS = 10;
}class Database {
use Configuration;
public function connect() { $maxConnections = self::MAX_CONNECTIONS; } }

W tym przykładzie cecha Konfiguracja definiuje stałą MAX_CONNECTIONS, która jest dostępna w klasie Database korzystającej z tej cechy. Pozwala to na centralizację stałych konfiguracyjnych i promuje bardziej zorganizowaną i łatwiejszą w utrzymaniu strukturę kodu.

9. Wprowadzenie nowych typów rozłącznej postaci normalnej (DNF) w PHP 8.2

PHP, dynamiczny i wszechstronny język skryptowy, wciąż ewoluuje, aby sprostać stale rosnącym wymaganiom tworzenia stron internetowych. Wraz z wydaniem PHP 8.2 programistów czeka niespodzianka polegająca na wprowadzeniu nowych typów rozłącznej formy normalnej (DNF). Ten dodatek do języka zwiększa ekspresję i elastyczność PHP, umożliwiając programistom bardziej efektywną pracę ze złożonymi wyrażeniami logicznymi.

Zrozumienie rozłącznej postaci normalnej (DNF)

Zanim zagłębimy się w nowe typy DNF w PHP 8.2, istotne jest zrozumienie, co w logice reprezentuje rozłączna forma normalna (DNF). DNF jest kanoniczną formą przedstawiania wyrażeń logicznych, gdzie każde wyrażenie jest rozłączeniem (OR) spójników (AND). Mówiąc prościej, jest to sposób na rozbicie złożonych instrukcji logicznych na serię prostych warunków połączonych operatorami OR.

Na przykład wyrażenie logiczne (A AND B) OR (C AND D) występuje w DNF, ponieważ jest rozłączeniem dwóch spójników.

Nowe typy DNF w PHP 8.2

PHP 8.2 wprowadza nowe typy DNF, umożliwiające bardziej intuicyjną pracę z wyrażeniami logicznymi i manipulowanie nimi. Te typy DNF zapewniają abstrakcję wyższego poziomu do obsługi złożonej logiki, ułatwiając programistom zarządzanie skomplikowanymi warunkami w kodzie.

Oto przegląd nowych typów DNF i sposobów ich wykorzystania:

1. Rozłączna forma normalna

Typ DisjunctiveNormalForm reprezentuje wyrażenia logiczne w formacie DNF. Możesz utworzyć instancje DisjunctiveNormalForm, aby enkapsulować złożone warunki:

 $dnfExpression = new DisjunctiveNormalForm(
new Conjunction('A', 'B'),
new Conjunction('C', 'D')
);

W tym przykładzie $dnfExpression reprezentuje wyrażenie DNF (A AND B) LUB (C AND D).

2. Koniunkcja

Typ Koniunkcja reprezentuje koniunkcję (AND) jednego lub większej liczby warunków. Możesz tworzyć instancje koniunkcji, aby budować złożone spójniki:

 $conjunction = new Conjunction('A', 'B', 'C');

Tutaj $koniunkcja reprezentuje koniunkcję (A ORAZ B AND C).

3. Wartość logiczna

Typ LogicalValue reprezentuje proste wartości logiczne, które mogą mieć wartość true, false lub zmienną. Można go używać w połączeniu z innymi typami DNF w celu tworzenia bardziej złożonych wyrażeń:

 $value = new LogicalValue('A');

Tutaj $wartość reprezentuje zmienną logiczną A.

10. Wprowadzenie do atrybutuAllowDynamicProperties: Zwiększanie elastyczności w PHP

Atrybut „AllowDynamicProperties” jest niezwykłym dodatkiem do PHP, szczególnie dla programistów, którzy cenią dynamiczną naturę języka. Za pomocą tego atrybutu możesz umożliwić obiektowi akceptowanie i manipulowanie właściwościami, które nie zostały jawnie zdefiniowane w jego klasie.

Oto prosty przykład zastosowania atrybutu „AllowDynamicProperties”:

 class DynamicObject {
}
$dynamicObj = new DynamicObject();
$dynamicObj->newProperty = "This is a dynamic property.";
echo $dynamicObj->newProperty;

W tym przykładzie klasa „DynamicObject” jest oznaczona atrybutem „AllowDynamicProperties”, który umożliwia dynamiczne dodawanie właściwości i dostęp do nich. To dynamiczne zachowanie może być szczególnie przydatne w przypadku obiektów, które muszą dostosować się do różnych struktur danych lub podczas pracy z danymi ze źródeł zewnętrznych, takich jak interfejsy API.

Wycofanie i usunięcie w PHP 8.2

  • Rozszerzenia: PHP 8.2 pożegnało się z kilkoma przestarzałymi i nieobsługiwanymi rozszerzeniami, w tym „oci8”, „mysql”, „mcrypt” i „interbase”. Zdecydowanie zachęca się programistów korzystających z tych rozszerzeń do migracji do nowoczesnych alternatyw, aby zapewnić bezpieczeństwo i stabilność swoich aplikacji.
  • Funkcja each() : Funkcja each() jest obecnie oficjalnie przestarzała w PHP 8.2. Tej funkcji używano do iteracji po tablicach poprzez przesuwanie wewnętrznego wskaźnika i zwracanie bieżącej pary klucz-wartość. Miał jednak różne problemy i został w dużej mierze zastąpiony pętlami foreach, które zapewniają lepszą czytelność i łatwość konserwacji.
  • Funkcja create_function() : Funkcja create_function() została oznaczona jako przestarzała. Ta funkcja została wykorzystana do dynamicznego tworzenia funkcji anonimowych, ale nie była zalecana ze względów bezpieczeństwa i lepszych alternatyw, takich jak zamknięcia.
  • Flaga filtra FILTER_SANITIZE_MAGIC_QUOTES : Flaga filtra FILTER_SANITIZE_MAGIC_QUOTES jest przestarzała. Ta flaga została użyta w funkcji filter_var() do oczyszczenia danych wejściowych poprzez dodanie ukośników przed znakami, takimi jak pojedyncze i podwójne cudzysłowy. Nowoczesne najlepsze praktyki sugerują używanie przygotowanych instrukcji i sparametryzowanych zapytań do obsługi danych wejściowych z bazy danych, przez co ta flaga staje się przestarzała.
  • Funkcja stristr() : Funkcja stristr(), która przeprowadza wyszukiwanie podciągu w ciągu znaków bez uwzględniania wielkości liter, jest przestarzała. Mimo że jest ona nadal funkcjonalna, zachęca się programistów do korzystania z wersji nieuwzględniającej wielkości liter, stripos() lub alternatyw str_contains() dla większej przejrzystości.
  • definiuj() z argumentami tablicowymi : Używanie funkcji definiowania() do definiowania stałych z tablicami jako wartościami jest obecnie przestarzałe. Chociaż możliwe było zdefiniowanie stałych za pomocą tablic jako wartości, praktykę tę uważa się za niekonwencjonalną i stałe powinny zazwyczaj mieć wartości skalarne.
  • Flagi SORT_NUMERIC i SORT_REGULAR : Flagi SORT_NUMERIC i SORT_REGULAR służące do sortowania funkcji takich jak sort() i usort() są przestarzałe. Flagi te nie są już potrzebne, ponieważ PHP automatycznie wykrywa typ danych elementów i odpowiednio je sortuje.

Ulepszenia w wydajności

PHP 8.2 wprowadza pod maską różne ulepszenia i optymalizacje wydajności. Chociaż zakres tych ulepszeń może się różnić w zależności od konkretnego przypadku użycia, aktualizacja do PHP 8.2 prawdopodobnie zapewni pewne zauważalne korzyści w zakresie wydajności. Ulepszenia te mogą mieć znaczący wpływ na aplikacje o dużym natężeniu ruchu lub wykonujące zadania wymagające dużej ilości zasobów, zwiększając ich responsywność i wydajność.

Poprawki błędów i stabilność

Jak każda nowa wersja PHP, PHP 8.2 rozwiązuje wiele błędów i problemów ze stabilnością. Poprawki te są kluczowe dla utrzymania ogólnej niezawodności języka i zapewnienia, że ​​PHP nadal będzie solidnym wyborem do tworzenia stron internetowych.

Często zadawane pytania - Nowość w PHP 8.2

Dlaczego w PHP 8.2 wprowadzono powiadomienia o wycofaniu ukrytych nawiasów?

Powiadomienia o wycofaniu ukrytych nawiasów zachęcają do spójnego stylu kodu, ostrzegając programistów, aby używali nawiasów podczas wywoływania funkcji. Zwiększa to przejrzystość kodu i łatwość konserwacji.

Co to są klasy tylko do odczytu i jak działają w PHP 8.2?

Klasy Readonly w PHP 8.2 umożliwiają ustawienie właściwości tylko raz, zazwyczaj podczas tworzenia obiektu, zapewniając, że pozostaną one niezmienne przez cały okres istnienia obiektu. Właściwości tylko do odczytu są deklarowane przy użyciu modyfikatora readonly.

W jaki sposób funkcja mysqli_execute_query i metoda mysqli::execute_query upraszczają interakcje z bazami danych w PHP 8.2?

Funkcje te usprawniają proces wykonywania zapytań SQL w bazie danych MySQL, zapewniając wydajne i bezpieczne sposoby wysyłania zapytań i pobierania wyników, zarówno proceduralnie, jak i obiektowo.

W jaki sposób atrybut „AllowDynamicProperties” zwiększa elastyczność w PHP 8.2?

Atrybut „AllowDynamicProperties” umożliwia obiektom akceptowanie i manipulowanie właściwościami, które nie zostały jawnie zdefiniowane w ich klasie, co wzmacnia dynamiczną naturę PHP.

Dlaczego naprawianie błędów i stabilność są ważne w PHP 8.2?

Poprawki błędów i ulepszenia stabilności w PHP 8.2 mają kluczowe znaczenie dla utrzymania ogólnej niezawodności języka, zapewniając, że PHP pozostanie solidnym wyborem do tworzenia stron internetowych poprzez rozwiązywanie problemów i zwiększanie jego stabilności.

Wniosek

Podsumowując, PHP 8.2 jawi się jako kluczowy kamień milowy w stale rozwijającym się krajobrazie tworzenia stron internetowych. Dzięki szerokiej gamie innowacyjnych funkcji, zwiększonej elastyczności i optymalizacjom wydajności zaspokaja zmieniające się wymagania programistów na całym świecie.

Wprowadzenie wyliczeń, promocji konstruktorów, klas tylko do odczytu, nazwanych argumentów i atrybutuAllowDynamicProperties umożliwia programistom pisanie czystszego, łatwiejszego w utrzymaniu kodu. Dodatkowo nowe typy rozłącznej formy normalnej (DNF) wprowadzają do PHP zaawansowane możliwości manipulacji logiką, jeszcze bardziej zwiększając jego wszechstronność. Jednak wraz z rozwojem PHP żegna się także z przestarzałymi rozszerzeniami i funkcjami, jednocześnie starannie eliminując błędy, zapewniając, że pozostanie niezawodnym i bezpiecznym wyborem do tworzenia stron internetowych.

Powiązana zawartość:

Jak naprawić błąd „Wymagana aktualizacja WordPressa wymaga wyłączenia PHP” (2 metody)

Dzienniki wolnych zapytań MySQL