Features der verschiedenen PHP-Versionen

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.

Tabelle: Features der verschiedenen PHP-Versionen

FeaturePHP 7.0PHP 7.1PHP 7.2PHP 7.3PHP 7.4PHP 8.0PHP 8.1
Improved Performancexxxxxxx
Reduced memory usagexxxxxxx
Abstract Syntax Treexxxxxxx
Many fatal errors converted to Exceptionsxxxxxxx
The null coalescing operator (??)xxxxxxx
Return and Scalar Type Declarationsxxxxxxx
Anonymous Classesxxxxxxx
Zero cost assertsxxxxxxx
Nullable Typesxxxxxx
Void return typexxxxxx
Symmetric array destructuringxxxxxx
Class constant visibilityxxxxxx
Iterable pseudo-typexxxxxx
Multi catch exception handlingxxxxxx
New object typexxxxx
Abstract method overridingxxxxx
Sodium core extensionxxxxx
Password hashing with Argon2xxxxx
Parameter type wideningxxxxx
Multibyte string improvementsxxxx
Typed propertiesxxx
Arrow functionsxxx
Limited Return Type Covariance and Argument Type Contravariancexxx
Unpacking inside arraysxxx
Opcache preloadingxxx
Union Typesxx
Static Return Typexx
Class name literal on objectxx
Stringable interfacexx
Trailing comma in parameter listxx
Mixed typexx
Attributesxx
Match expressionxx
Nullsafe operatorxx
Named argumentsxx
Enumerationsx
Readonly propertiesx
Fibersx
Pure Intersection Typesx
"never" return typex
First-class Callable Syntaxx
"final" modifier for class constantsx

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert