Was ist neu in PHP 8.2: Eine umfassende Übersicht

Veröffentlicht: 2023-10-17
Auf sozialen Profilen teilen.

PHP, die weit verbreitete serverseitige Skriptsprache, wird ständig weiterentwickelt, um den sich ständig ändernden Anforderungen der Webentwicklung gerecht zu werden. Die Veröffentlichung von PHP 8.2 im November 2022 bringt eine Vielzahl aufregender Funktionen, wichtige veraltete Funktionen und wichtige Fehlerbehebungen mit sich. In diesem Artikel werden wir uns eingehend mit den bemerkenswerten Aspekten der Neuerungen in PHP 8.2 befassen und beleuchten, was Entwickler von dieser neuesten Version erwarten können.

Inhaltsverzeichnis

Neue Eigenschaften

1. Aufzählungen: Einführung in die Typensicherheit

Version 8.2 ist vielleicht eine der am meisten erwarteten Ergänzungen zu PHP und führt endlich native Unterstützung für Aufzählungen (Enums) ein. Mit Aufzählungen können Entwickler eine Reihe benannter Werte mit expliziten Typen definieren und so PHP um eine erhebliche Ebene der Typsicherheit erweitern.

Hier ist ein einfaches Beispiel für die Funktionsweise von Aufzählungen:

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

Aufzählungen können auch Werte zugeordnet sein, was sie für verschiedene Anwendungsfälle vielseitig macht. Diese Funktion ist besonders nützlich, um sicherzustellen, dass Ihr Code lesbar und wartbar bleibt und weniger anfällig für Fehler ist, die durch den Missbrauch von Konstanten oder magischen Zahlen entstehen.

2. Konstrukteursförderung: Reduzierung des Boilerplate-Codes

PHP 8.2 führt die Konstruktorförderung ein, eine Funktion, die darauf abzielt, Klassendefinitionen zu vereinfachen und Boilerplate-Code zu reduzieren. Mit der Konstruktor-Hochstufung können Sie Klasseneigenschaften direkt in der Parameterliste des Konstruktors deklarieren und initialisieren. Dadurch entfällt die Notwendigkeit separater Eigenschaftsdeklarationen, wodurch Ihr Code präziser und einfacher zu warten ist.

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

Die Konstruktorförderung ist besonders wertvoll, wenn es um Klassen mit vielen Eigenschaften geht, da sie die Unordnung in Ihrer Codebasis verringert.

3. Readonly-Klassen

In PHP 8.2 ermöglichen schreibgeschützte Klassen Entwicklern, Klassen mit Eigenschaften zu definieren, die nur einmal festgelegt werden können, typischerweise während der Objekterstellung. Dadurch wird sichergestellt, dass die Eigenschaften während der gesamten Lebensdauer des Objekts konstant bleiben. Schreibgeschützte Eigenschaften werden mit dem Readonly-Modifizierer deklariert und müssen im Klassenkonstruktor initialisiert werden.

Mit PHP 8.2 wird der Prozess deutlich vereinfacht:

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

4. Benannte Argumente in „include“- und „require“-Anweisungen

In PHP 8.2 können jetzt benannte Argumente verwendet werden, wenn Dateien eingebunden oder angefordert werden. Diese Funktion verbessert die Lesbarkeit des Codes, insbesondere beim Umgang mit Funktionen, die mehrere Argumente akzeptieren.

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

Durch die Angabe von Namen für diese Argumente machen Sie Ihren Code selbsterklärender und verringern die Wahrscheinlichkeit von Fehlern aufgrund einer falschen Argumentreihenfolge.

5. Hinweise zur Einstellung impliziter Klammern

Um die Konsistenz und Lesbarkeit des Codes zu verbessern, führt PHP 8.2 veraltete Hinweise für Funktionen und Methoden ein, die ohne Klammern aufgerufen werden. Auch wenn dies noch kein Fehler ist, dient dies als Warnung für Entwickler, die empfohlene Praxis der konsequenten Verwendung von Klammern beim Aufrufen von Funktionen zu übernehmen.

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

Durch den Verzicht auf implizite Klammern zielt PHP darauf ab, die Klarheit und Wartbarkeit des Codes zu verbessern.

6. Unterstützung für das Verbergen sensibler Parameterwerte

PHP bietet die Möglichkeit, den Aufrufstapel in jedem beliebigen Programmstatus zu überwachen, was sich besonders bei der Fehlerbehebung von Anwendungsproblemen als wertvoll erweist. In bestimmten Fällen können Stack-Traces jedoch vertrauliche Details enthalten, die geheimgehalten werden müssen.

In PHP 8.2 wird ein neues Attribut namens „SensitiveParameter“ eingeführt. Dieses Attribut dient dazu, zu verschleiern, dass sensible Daten angezeigt oder protokolliert werden, wenn in einer Anwendung Fehler auftreten. In der Praxis sieht seine Verwendung wie folgt aus:

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

7. Einführung der Funktion mysqli_execute_query und der Methode mysqli::execute_query

PHP, die vielseitige Skriptsprache für die Webentwicklung, wird ständig weiterentwickelt, um ihre Funktionen und Benutzerfreundlichkeit zu verbessern. In PHP 8.2 können Entwickler mit der Einführung von zwei neuen Funktionen rechnen: der Funktion mysqli_execute_query und der Methode mysqli::execute_query. Diese Ergänzungen sollen die Datenbankinteraktionen rationalisieren und vereinfachen und die Arbeit mit MySQL-Datenbanken noch komfortabler machen.

mysqli_execute_query-Funktion

Die Funktion mysqli_execute_query ist eine leistungsstarke Ergänzung zur MySQLi-Erweiterung von PHP. Es ist speziell auf die Ausführung von SQL-Abfragen für eine MySQL-Datenbank zugeschnitten. Diese Funktion bietet eine einfache und effiziente Möglichkeit, SQL-Abfragen zu senden und Ergebnisse abzurufen. Hier ist ein kurzes Beispiel für seine Verwendung:

 $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();

Die Funktion mysqli_execute_query rationalisiert den Prozess der Vorbereitung und Ausführung von Abfragen und sorgt gleichzeitig für Sicherheit durch Parameterbindung.

mysqli::execute_query-Methode

Zusätzlich zur neuen Funktion führt PHP 8.2 die Methode mysqli::execute_query als Teil der MySQLi-Klasse ein. Diese Methode vereinfacht die Abfrageausführung für Entwickler, die objektorientierte Programmierung bevorzugen. Hier ist ein Beispiel für seine Verwendung:

 $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();

Die Methode mysqli::execute_query bietet einen objektorientierten Ansatz zum Ausführen von Datenbankabfragen und bietet Entwicklern, die diesen Codierungsstil bevorzugen, eine intuitivere Erfahrung.

8. Konstanten in Merkmalen zulassen: Verbesserung der Wiederverwendbarkeit und Wartbarkeit des Codes

Merkmale sind eine wertvolle Funktion in modernen Programmiersprachen, einschließlich PHP, die es Entwicklern ermöglichen, Code über verschiedene Klassen hinweg wiederzuverwenden, ohne dass eine Vererbung erforderlich ist. PHP-Traits stellen in erster Linie Methoden bereit, aber in PHP 8.2 wird eine bemerkenswerte Verbesserung eingeführt: die Möglichkeit, Konstanten innerhalb von Traits zu definieren. Ziel dieser Funktion ist es, die Organisation, Wiederverwendbarkeit und Wartbarkeit des Codes zu verbessern und Entwicklern mehr Flexibilität bei der Codegestaltung zu bieten.

Die Rolle von Merkmalen in PHP

Bevor wir uns mit dem Hinzufügen von Konstanten in Merkmalen befassen, werfen wir einen kurzen Blick auf die Rolle von Merkmalen in PHP. Merkmale sind ein Mechanismus zur Wiederverwendung von Code in Sprachen mit einfacher Vererbung wie PHP. Sie ermöglichen es Ihnen, eine Reihe von Methoden zu definieren, die in mehreren Klassen wiederverwendet werden können. Wenn eine Klasse ein Merkmal verwendet, erbt sie die in diesem Merkmal definierten Methoden, wodurch die Codemodularität verbessert und die Redundanz verringert wird.

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

In diesem Beispiel stellt das Loggable-Merkmal eine Protokollmethode bereit, die von jeder Klasse verwendet werden kann, die das Merkmal enthält, wodurch die Wartbarkeit und Organisation des Codes verbessert wird.

Konstanten in Merkmalen: Eine neue Funktion

Mit PHP 8.2 können Entwickler nun Konstanten innerhalb von Merkmalen definieren, was in früheren PHP-Versionen nicht möglich war. Konstanten in Merkmalen funktionieren ähnlich wie Konstanten in Klassen, sind jedoch in Klassen zugänglich, die das Merkmal verwenden.

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

In diesem Beispiel definiert das Konfigurationsmerkmal eine MAX_CONNECTIONS-Konstante, auf die innerhalb der Datenbankklasse zugegriffen werden kann, die das Merkmal verwendet. Dies ermöglicht die Zentralisierung von Konfigurationskonstanten und fördert eine besser organisierte und wartbare Codestruktur.

9. Einführung neuer DNF-Typen (Disjunctive Normal Form) in PHP 8.2

PHP, eine dynamische und vielseitige Skriptsprache, entwickelt sich ständig weiter, um den ständig wachsenden Anforderungen der Webentwicklung gerecht zu werden. Mit der Veröffentlichung von PHP 8.2 erwartet Entwickler eine Freude mit der Einführung neuer DNF-Typen (Disjunctive Normal Form). Diese Erweiterung der Sprache erhöht die Ausdruckskraft und Flexibilität von PHP und ermöglicht es Entwicklern, effektiver mit komplexen logischen Ausdrücken zu arbeiten.

Disjunktive Normalform (DNF) verstehen

Bevor wir uns mit den neuen DNF-Typen in PHP 8.2 befassen, ist es wichtig zu verstehen, was die Disjunktive Normalform (DNF) in der Logik darstellt. DNF ist eine kanonische Form der Darstellung logischer Ausdrücke, bei der jeder Ausdruck eine Disjunktion (OR) von Konjunktionen (AND) ist. Einfacher ausgedrückt handelt es sich dabei um eine Möglichkeit, komplexe logische Anweisungen in eine Reihe einfacher Bedingungen zu zerlegen, die durch ODER-Operatoren verbunden sind.

Beispielsweise ist der logische Ausdruck (A AND B) OR (C AND D) in DNF enthalten, da es sich um eine Disjunktion zweier Konjunktionen handelt.

Neue DNF-Typen in PHP 8.2

PHP 8.2 führt neue DNF-Typen ein, um logischere Ausdrücke intuitiver zu bearbeiten und zu manipulieren. Diese DNF-Typen bieten eine Abstraktion auf höherer Ebene für die Handhabung komplexer Logik und erleichtern Entwicklern die Verwaltung komplizierter Bedingungen in ihrem Code.

Hier ein Überblick über die neuen DNF-Typen und deren Einsatzmöglichkeiten:

1. Disjunktive Normalform

Der Typ DisjunctiveNormalForm stellt logische Ausdrücke in DNF dar. Sie können Instanzen von DisjunctiveNormalForm erstellen, um komplexe Bedingungen zu kapseln:

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

In diesem Beispiel stellt $dnfExpression den DNF-Ausdruck (A UND B) ODER (C UND D) dar.

2. Konjunktion

Der Typ „Konjunktion“ stellt die Verknüpfung (UND) einer oder mehrerer Bedingungen dar. Sie können Instanzen von Conjunction erstellen, um komplexe Konjunktionen zu bilden:

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

Hier stellt $conjunction die Konjunktion (A UND B UND C) dar.

3. Logischer Wert

Der Typ LogicalValue stellt einfache logische Werte dar, die entweder wahr, falsch oder eine Variable sein können. Es kann in Verbindung mit anderen DNF-Typen verwendet werden, um komplexere Ausdrücke zu erstellen:

 $value = new LogicalValue('A');

Hier repräsentiert $value die logische Variable A.

10. Einführung des AllowDynamicProperties-Attributs: Erweiterung der Flexibilität in PHP

Das Attribut „AllowDynamicProperties“ ist eine bemerkenswerte Ergänzung zu PHP, insbesondere für Entwickler, die Wert auf die Dynamik der Sprache legen. Mit diesem Attribut können Sie einem Objekt ermöglichen, Eigenschaften zu akzeptieren und zu bearbeiten, die nicht explizit in seiner Klasse definiert wurden.

Hier ist ein einfaches Beispiel dafür, wie das Attribut „AllowDynamicProperties“ angewendet werden kann:

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

In diesem Beispiel ist die Klasse „DynamicObject“ mit dem Attribut „AllowDynamicProperties“ gekennzeichnet, das das dynamische Hinzufügen und Zugreifen auf Eigenschaften ermöglicht. Dieses dynamische Verhalten kann besonders nützlich sein, wenn Sie mit Objekten arbeiten, die sich an verschiedene Datenstrukturen anpassen müssen, oder wenn Sie mit Daten aus externen Quellen wie APIs arbeiten.

Abwertungen und Entfernungen in PHP 8.2

  • Erweiterungen: PHP 8.2 hat sich von mehreren veralteten und nicht gepflegten Erweiterungen verabschiedet, darunter „oci8“, „mysql“, „mcrypt“ und „interbase“. Entwicklern, die auf diese Erweiterungen angewiesen sind, wird dringend empfohlen, auf moderne Alternativen umzusteigen, um die Sicherheit und Stabilität ihrer Anwendungen zu gewährleisten.
  • Funktion „each()“ : Die Funktion „each()“ ist in PHP 8.2 nun offiziell veraltet. Diese Funktion wurde verwendet, um über Arrays zu iterieren, indem der interne Zeiger vorgerückt und das aktuelle Schlüssel-Wert-Paar zurückgegeben wurde. Es gab jedoch verschiedene Probleme und wurde größtenteils durch foreach-Schleifen ersetzt, die eine bessere Lesbarkeit und Wartbarkeit bieten.
  • Funktion „create_function()“ : Die Funktion „create_function()“ ist als veraltet markiert. Diese Funktion wurde zum dynamischen Erstellen anonymer Funktionen verwendet, wurde jedoch aufgrund von Sicherheitsbedenken und besseren Alternativen wie Schließungen nicht empfohlen.
  • Filterflag FILTER_SANITIZE_MAGIC_QUOTES : Das Filterflag FILTER_SANITIZE_MAGIC_QUOTES ist veraltet. Dieses Flag wurde mit filter_var() verwendet, um Eingaben zu bereinigen, indem Schrägstriche vor Zeichen wie einfache und doppelte Anführungszeichen eingefügt wurden. Moderne Best Practices schlagen vor, vorbereitete Anweisungen und parametrisierte Abfragen zur Verarbeitung von Datenbankeingaben zu verwenden, wodurch dieses Flag überflüssig wird.
  • Funktion stristr() : Die Funktion stristr(), die eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung nach einem Teilstring in einem String durchführt, ist veraltet. Obwohl es noch funktionsfähig ist, wird Entwicklern empfohlen, zur besseren Übersichtlichkeit die Version, bei der die Groß-/Kleinschreibung nicht beachtet wird, stripos() oder die Alternative str_contains() zu verwenden.
  • define() mit Array-Argumenten : Die Verwendung von define() zum Definieren von Konstanten mit Arrays als Werten ist jetzt veraltet. Obwohl es möglich war, Konstanten mit Arrays als Werte zu definieren, gilt diese Praxis als unkonventionell und Konstanten sollten normalerweise Skalarwerte haben.
  • SORT_NUMERIC- und SORT_REGULAR-Flags : Die SORT_NUMERIC- und SORT_REGULAR-Flags für Sortierfunktionen wie sort() und usort() sind veraltet. Diese Flags werden nicht mehr benötigt, da PHP automatisch den Datentyp der Elemente erkennt und sie entsprechend sortiert.

Leistungsverbesserungen

PHP 8.2 bringt verschiedene Leistungsverbesserungen und Optimierungen unter die Haube. Während das Ausmaß dieser Verbesserungen je nach Ihrem spezifischen Anwendungsfall variieren kann, wird ein Upgrade auf PHP 8.2 wahrscheinlich einige bemerkenswerte Leistungsvorteile bringen. Diese Verbesserungen können erhebliche Auswirkungen auf Anwendungen mit hohem Datenverkehr oder Anwendungen mit ressourcenintensiven Aufgaben haben und sie reaktionsfähiger und effizienter machen.

Fehlerbehebungen und Stabilität

Wie jede neue PHP-Version behebt PHP 8.2 zahlreiche Fehler und Stabilitätsprobleme. Diese Korrekturen sind von entscheidender Bedeutung, um die allgemeine Zuverlässigkeit der Sprache aufrechtzuerhalten und sicherzustellen, dass PHP weiterhin eine solide Wahl für die Webentwicklung ist.

FAQs – Neu in PHP 8.2

Warum werden in PHP 8.2 veraltete Hinweise für implizite Klammern eingeführt?

Hinweise zur Abschaffung impliziter Klammern fördern einen konsistenten Codestil, indem sie Entwickler warnen, beim Aufrufen von Funktionen Klammern zu verwenden. Dies verbessert die Klarheit und Wartbarkeit des Codes.

Was sind schreibgeschützte Klassen und wie funktionieren sie in PHP 8.2?

Mit schreibgeschützten Klassen in PHP 8.2 können Eigenschaften nur einmal festgelegt werden, typischerweise während der Objekterstellung, wodurch sichergestellt wird, dass sie während der gesamten Lebensdauer des Objekts konstant bleiben. Readonly-Eigenschaften werden mit dem readonly-Modifizierer deklariert.

Wie vereinfachen die Funktion mysqli_execute_query und die Methode mysqli::execute_query Datenbankinteraktionen in PHP 8.2?

Diese Funktionen optimieren den Prozess der Ausführung von SQL-Abfragen für eine MySQL-Datenbank und bieten effiziente und sichere Möglichkeiten zum Senden von Abfragen und zum Abrufen von Ergebnissen, entweder prozedural oder objektorientiert.

Wie erweitert das Attribut „AllowDynamicProperties“ die Flexibilität in PHP 8.2?

Das Attribut „AllowDynamicProperties“ ermöglicht es Objekten, Eigenschaften zu akzeptieren und zu manipulieren, die nicht explizit in ihrer Klasse definiert wurden, wodurch die dynamische Natur von PHP verbessert wird.

Warum sind Fehlerbehebung und Stabilität in PHP 8.2 wichtig?

Fehlerbehebungen und Stabilitätsverbesserungen in PHP 8.2 sind entscheidend für die Aufrechterhaltung der Gesamtzuverlässigkeit der Sprache und stellen sicher, dass PHP eine robuste Wahl für die Webentwicklung bleibt, indem sie Probleme beheben und die Stabilität verbessern.

Abschluss

Zusammenfassend lässt sich sagen, dass PHP 8.2 ein entscheidender Meilenstein in der sich ständig weiterentwickelnden Landschaft der Webentwicklung ist. Mit einer breiten Palette innovativer Funktionen, erhöhter Flexibilität und Leistungsoptimierungen wird es den sich verändernden Anforderungen von Entwicklern weltweit gerecht.

Die Einführung von Aufzählungen, Konstruktor-Promotion, schreibgeschützten Klassen, benannten Argumenten und dem Attribut „AllowDynamicProperties“ ermöglicht es Entwicklern, saubereren und wartbareren Code zu schreiben. Darüber hinaus bringen die neuen Disjunctive Normal Form (DNF)-Typen erweiterte Funktionen zur Logikmanipulation in PHP und erweitern so seine Vielseitigkeit weiter. Mit der Weiterentwicklung von PHP verabschiedet sich PHP jedoch auch von veralteten Erweiterungen und Funktionen und behebt sorgfältig Fehler, um sicherzustellen, dass es weiterhin eine zuverlässige und sichere Wahl für die Webentwicklung bleibt.

Verwandter Inhalt:

So beheben Sie den Fehler „WordPress deaktiviert PHP-Update erforderlich“ (2 Methoden)

MySQL-Protokolle für langsame Abfragen