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.0
Improved Performancexxxxxx
Reduced memory usagexxxxxx
Abstract Syntax Treexxxxxx
Many fatal errors converted to Exceptionsxxxxxx
The null coalescing operator (??)xxxxxx
Return and Scalar Type Declarationsxxxxxx
Anonymous Classesxxxxxx
Zero cost assertsxxxxxx
Nullable Typesxxxxx
Void return typexxxxx
Symmetric array destructuringxxxxx
Class constant visibilityxxxxx
Iterable pseudo-typexxxxx
Multi catch exception handlingxxxxx
New object typexxxx
Abstract method overridingxxxx
Sodium core extensionxxxx
Password hashing with Argon2xxxx
Parameter type wideningxxxx
Multibyte string improvementsxxx
Typed propertiesxx
Arrow functionsxx
Limited Return Type Covariance and Argument Type Contravariancexx
Unpacking inside arraysxx
Opcache preloadingxx
Union Typesx
Static Return Typex
Class name literal on objectx
Stringable interfacex
Trailing comma in parameter listx
Mixed typex
Attributesx
Match expressionx
Nullsafe operatorx
Named argumentsx

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.