Ich springe viel zwischen Projekten mit verschiedenen PHP-Versionen und kann Gedächtnisstützen gut gebrauchen, welches Feature wann eingeführt wurde.
Deswegen habe ich hier eine Liste mit den wichtigsten Features der letzten Versionen zusammen gestellt.
Inhaltsverzeichnis
Tabelle: Features der verschiedenen PHP-Versionen
Feature | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 |
---|---|---|---|---|---|---|
Improved Performance | x | x | x | x | x | x |
Reduced memory usage | x | x | x | x | x | x |
Abstract Syntax Tree | x | x | x | x | x | x |
Many fatal errors converted to Exceptions | x | x | x | x | x | x |
The null coalescing operator (??) | x | x | x | x | x | x |
Return and Scalar Type Declarations | x | x | x | x | x | x |
Anonymous Classes | x | x | x | x | x | x |
Zero cost asserts | x | x | x | x | x | x |
Nullable Types | x | x | x | x | x | |
Void return type | x | x | x | x | x | |
Symmetric array destructuring | x | x | x | x | x | |
Class constant visibility | x | x | x | x | x | |
Iterable pseudo-type | x | x | x | x | x | |
Multi catch exception handling | x | x | x | x | x | |
New object type | x | x | x | x | ||
Abstract method overriding | x | x | x | x | ||
Sodium core extension | x | x | x | x | ||
Password hashing with Argon2 | x | x | x | x | ||
Parameter type widening | x | x | x | x | ||
Multibyte string improvements | x | x | x | |||
Typed properties | x | x | ||||
Arrow functions | x | x | ||||
Limited Return Type Covariance and Argument Type Contravariance | x | x | ||||
Unpacking inside arrays | x | x | ||||
Opcache preloading | x | x | ||||
Union Types | x | |||||
Static Return Type | x | |||||
Class name literal on object | x | |||||
Stringable interface | x | |||||
Trailing comma in parameter list | x | |||||
Mixed type | x | |||||
Attributes | x | |||||
Match expression | x | |||||
Nullsafe operator | x | |||||
Named arguments | x |
Neu in PHP 7.4
Arrow Functions
Arrow Functions bieten eine prägnantere (kürzere) Syntax für anonyme Funktionen. Im Gegensatz zu anonymen Funktionen können Variablen aus den übergeordneten Scope automatisch verwendet werden.
Beispiel:
<?php declare(strict_types=1); $factor = 10; $nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]); // $nums = array(10, 20, 30, 40);
Limited Return Type Covariance and Argument Type Contravariance
Covariance heißt, dass die Methode einer Child-Klasse einen spezifischeren Typ zurückgeben darf als die Methode der Parent-Klasse.
Contravariance heißt, dass ein Methoden-Parameter in einer Child-Klasse weniger spezifisch sein darf als in der Methode der Parent-Klasse.
Beispiele:
<?php declare(strict_types=1); class A {} class B extends A {} class Producer { public function method(): A {} } class ChildProducer extends Producer { public function method(): B {} }
Das ist ein Beispiel für Covariance. Die Methode ChildProducer::method() gibt B zurück, die Parent-Methode Producer::method() A. B erweitert A und ist damit „spezifischer“.
Opcache Preloading
Mit dem Einsatz von Opcache Preloading kann man PHP-Anwendungen beschleunigen. Gegenüber dem normalen Opcache werden nicht nur verwendete Code-Files als vorkompilierter Opcode auf der Disk abgespeichert, sondern zusammenhängende Klassen, Traits und Interfaces werden auch noch miteinander verlinkt und im RAM abgelegt.
Anwendungen profitieren nicht automatisch davon, aber wenn man das Feature explizit nutzt, kann man bis zu niedrige zweistellige Performance-Verbesserungen erzielen.
Typed Properties
Man kann die Datentypen von Klassen-Eigenschaften definieren.
Beispiel:
<?php declare(strict_types=1); class User { public int $id; public string $name; }
Somit kannst du sicher sein: $id enthält immer einen Integer-Wert, $name einen String.
Unpacking inside arrays
Mit diesem neuen Feature kann man die Werte eines Arrays inmitten eines anderen Arrays einfügen. Das funktioniert mit numerischen Arrays.
Beispiel:
<?php declare(strict_types=1); $parts = ['apple', 'pear']; $fruits = ['banana', 'orange', ...$parts, 'watermelon']; // ['banana', 'orange', 'apple', 'pear', 'watermelon'];
Neu in PHP 8.0
Hier findest du Beispiele von Marcel Pociot für die neuen Features. Auch die offizielle Release-Seite für PHP 8.0 gibt gute Beispiele.
Neu in PHP 8.1
Eine gute Übersicht gibt die offizielle Release-Seite für PHP 8.1. Auch stitcher.io kann ich empfehlen.
Enumerations (Enums)
Mit Enums kann man eigene Typen definieren, die eine genau vorgegebene Menge an möglichen Werten hat. Außerdem kann man nette Dinge mit Enums anstellen, wie dieser Thread zeigt.