Einige Verbesserungen von PHP Version 8
- 24-07-2022
- Toanngo92
- 0 Comments
PHP 8.0 wurde am 26. November 2020 veröffentlicht. Diese Änderungen machen die Arbeit mit PHP einfacher und unkomplizierter. PHP 8.0 gilt als großes Update der PHP-Sprache. Es hat viele neue Funktionen und Optimierungen, darunter:
- Benannte Argumente
- Attribute
- Förderung von Bauherreneigentum
- Union-Typen
- Übereinstimmungsausdruck
- Nullsafe-Operator
- Verbesserte Fehlerbehandlung und Typsystem
- Konsistenz
Mục lục
Benannte Argumente (Benannte Argumente)
In dieser neuen Funktion müssen Benutzer nur erforderliche Parameter angeben und optionale Parameter weglassen. Argumente sind selbstdokumentiert und hängen nicht von der Sortierreihenfolge ab.
Beispiel für den Unterschied zwischen PHP 7.0 und 8.0
PHP7 | PHP8 |
htmlspecialchars($string, ENT_COMPATCT | ENT HTML401, 'UTF-8',false); | htmlspecialchars($string,double encode: false); |
Attribute (Attribute)
Benutzer können jetzt strukturierte Metadaten mit der nativen PHP-Syntax anstelle von PHP-Dokumentkommentaren verwenden.
PHP7.0 | PHP 8.0 |
Klasse Postcontroller{ /** * @Route("api/posts/{id}"),methods={"GET"} */ öffentliche Funktion get($id){ // machen } } | Klasse PostsController{ #[Route("api/posts/{id}", ,methods: ["GET"])] öffentliche Funktion get($id){ // machen } } |
Konstruktor-Property-Promotion (Einführung in die Objektinitialisierung)
Beim Definieren und Initialisieren von Eigenschaften für Objekte gibt es eine Kürzung des Quellcodes.
PHP7.0 | PHP 8.0 |
Klasse Punkt{ Börsenkurs $x; Börsengang $y; Börsengang $z; öffentliche Funktion __construct( float $x = 0,0, Float $y = 0,0, float $z = 0,0 ){ $dies->x = $x; $dies->y = $y; $dies->z = $z; // machen } } | Klasse Punkt{ öffentliche Funktion __construct( Börsenkurs $x = 0,0, Börsenkurs $y = 0,0, Börsenkurs $z = 0,0 ){ //machen } } |
Union-Typen (Kombinieren von Datentypen)
Benutzer können laufzeitvalidierte native assoziative Typdeklarationen anstelle von PHP-Docs-Annotationen verwenden.
PHP7 | PHP8 |
Klassennummer{ /** @var int|float */ Privatnummer; /** * @param float|int $zahl */ Öffentliche Funktion __construct($number){ $diese->Zahl = $Zahl; } } neue Zahl('NaN'); // es ist Arbeit | Klassennummer { öffentliche Funktion __construct(private int|float $number){ // machen } } neue Zahl('NaN'); // Fehler eingeben |
Übereinstimmungsausdruck (Übereinstimmungsausdrücke)
Der Ausdrucksabgleich in PHP 8.0 ähnelt der Konvertierung mit den folgenden Funktionen:
- Eine Übereinstimmung ist ein Ausdruck, was bedeutet, dass sein Ergebnis in einer Variablen gespeichert oder zurückgegeben werden kann.
- Passende Verzweigungen unterstützen nur einzeilige Ausdrücke und erfordern keine break-Anweisung; .
- Der Vergleich vergleicht nicht streng.
PHP7 | PHP8 |
<?php Schalter (8.0) { Fall '8.0': $ergebnis = '8.0'; Unterbrechung; Fall 8.0; $result = '8.0 erwartet'; Unterbrechung; } echo $ergebnis; // 8.0 | Echoübereinstimmung (8.0) { '8.0' => '8.0', 8.0 => '8.0 erwartet', }; // 8.0 ausgenommen |
Null Safe-Operator
Der Benutzer kann stattdessen eine Reihe (Kette) von Aufrufen mit dem neuen Null-Safe-Operator verwenden
Schreiben Sie Code für Bedingungen, die auf null prüfen.
Die gesamte Ausführung wird abgebrochen, wenn die Identifizierung eines Elements in der Sequenz fehlschlägt, und danach ist die gesamte Kette null.
PHP7 | PHP8 |
$land = null; if($session !==null){ $user = $session->user; if($user !==null){ $address = $user->getAddress(); } if($adresse !==null){ $Land = $Adresse->Land; } } | $country = $session?->user?->getAddress()?->country; |
Verbesserte Fehlerbehandlung und Typsystem
Es gab viele Änderungen in verschiedenen Arten von Systemen und eine verbesserte Fehlerbehandlung wie folgt:
- Strengere Typprüfung für arithmetische/bitweise Operatoren als in der vorherigen Version
- Validierung der abstrakten Trait-Methode
- Magische Methoden haben jetzt korrekte Signaturen.
- Warnmotor wurde neu klassifiziert
- Inkompatible Methode verursacht schwerwiegenden Fehler
- Vererbung mit privaten Methoden
- Gemischter Typ
- Statischer Rückgabetyp
- Verwenden Sie undurchsichtige Objekte anstelle von Ressourcen für OpenSSL, GD, Curl,
XML Writer, Sockets und XML-Erweiterungen
Konsistenz (Konsistenz)
PHP 8.0 hat einen Konsistenzfehler für interne Funktionen. Die meisten inneren Funktionen lösen eine Fehlerausnahme aus, wenn Parameter nicht validiert werden können.
Just-In-Time (JIT)-Compiler
Als interpretierte oder interpretierte Sprache wird PHP nach dem Kompilieren nicht sofort zum Startzeitpunkt ausgeführt. Es läuft in Echtzeit. In früheren Versionen von PHP musste der Interpreter während der Kompilierung, wann immer PHP-Code ausgeführt wurde, den Code zuerst interpretieren, dann kompilieren und schließlich ausführen. Dies wird für jede Anforderung wiederholt durchgeführt, was zu einer langsamen Codeausführung und einer Verschwendung von CPU-Ressourcen führt.
Dieses Problem wurde nun mit der Einführung des Just In Time (JIT)-Compilers in PHP 8.0 behoben.
Mit dem JIT-Compiler können Benutzer ein Programm in Maschinencode kompilieren, kurz bevor es ausgeführt werden kann. Da JIT die Kompilierungsphase überspringt, bietet es Flexibilität im PHP-Code und liefert weitreichende Verbesserungen bei der Codeausführung, Speichernutzung und Leistung. Diese Verbesserungen gelten jedoch nur für mathematische oder numerische Berechnungen, nicht für normale PHP-Webanwendungen. JIT wird häufig in Programmen verwendet, die lange Ausführungszyklen beinhalten, wie 3D-Rendering, Datenanalyse oder künstliche Intelligenz.
PHP 8.0 führt zwei JIT-Kompilierungstools ein, nämlich Tracing JIT und Function JIT.
Tracing JIT ist die sicherste der beiden. Bei synthetischen Benchmarks hat es eine dreimal bessere Leistung. Darüber hinaus gibt es zwei Verbesserungen bei bestimmten lang laufenden Anwendungen.