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:

FeaturePHP 7.0PHP 7.1PHP 7.2PHP 7.3PHP 7.4
Improved Performancexxxxx
Reduced memory usagexxxxx
Abstract Syntax Treexxxxx
Many fatal errors converted to Exceptionsxxxxx
The null coalescing operator (??)xxxxx
Return and Scalar Type Declarationsxxxxx
Anonymous Classesxxxxx
Zero cost assertsxxxxx
Nullable Typesxxxx
Void return typexxxx
Symmetric array destructuringxxxx
Class constant visibilityxxxx
Iterable pseudo-typexxxx
Multi catch exception handlingxxxx
New object typexxx
Abstract method overridingxxx
Sodium core extensionxxx
Password hashing with Argon2xxx
Parameter type wideningxxx
Multibyte string improvementsxx
Typed propertiesx
Arrow functionsx
Limited Return Type Covariance and Argument Type Contravariancex
Unpacking inside arraysx
Opcache preloadingx

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'];

Schreibe einen Kommentar

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