Neue Features
PHP-Kern
Typisierte Eigenschaften
Klasseneigenschaften unterstützen nun Typ-Deklarationen.
Das obige Beispiel erzwingt, dass
$user->id
nur
int-Werte zugewiesen werden können und
$user->name
nur
string-Werte.
Pfeilfunktionen
Die Pfeilfunktionen bieten eine
Kurzform der Syntax für die Definition von Funktionen mit impliziter
Bindung an den Wertebereich.
Eingeschränkte Kovarianz des Rückgabetyps und Kontravarianz des Parametertyps
Der folgende Code funktioniert nun:
Die vollständige Unterstützung der Varianz ist nur verfügbar, wenn
automatisches Laden verwendet wird. Innerhalb einer einzelnen Datei sind
nur nichtzyklische Typreferenzen möglich, da alle Klassen verfügbar sein
müssen, bevor sie referenziert werden.
Zuweisungsoperator für die Kombination mit null (null-Koaleszenz)
Entpacken innerhalb von Arrays
Trennzeichen für numerische Literale
Bei numerischen Literalen können nun Unterstriche zwischen den Ziffern
eingefügt werden.
Schwache Referenzen
Eine schwache Referenz
ermöglicht es dem Programmierer, eine Referenz auf ein Objekt zu behalten,
die nicht verhindert, dass das Objekt zerstört wird.
Zulassen von Exceptions aus __toString()
Bei der Methode __toString() ist es
nun möglich, Exceptions auszulösen. Zuvor führte dies zu einem
schwerwiegenden Fehler. Alle behebbaren schwerwiegenden Fehler bei
Zeichenketten-Konvertierungen wurden in
Error-Exceptions umgewandelt.
CURL
Wenn die Erweiterung mit libcurl >= 7.56.0 kompiliert wurde, unterstützt
die Klasse CURLFile nun zusätzlich zu einfachen
Dateinamen auch Stream-Wrapper.
Filter
Der Filter FILTER_VALIDATE_FLOAT
unterstützt nun die
Optionen min_range
und max_range
mit
der gleichen Semantik wie FILTER_VALIDATE_INT
.
FFI
FFI ist eine neue Erweiterung, die eine einfache Möglichkeit bietet, native
Funktionen aufzurufen, auf native Variablen zuzugreifen und Datenstrukturen
zu erzeugen/aufzurufen, die in C-Bibliotheken definiert sind.
GD
Der Bildfilter IMG_FILTER_SCATTER
wurde hinzugefügt,
um einen Streufilter auf Bilder anzuwenden.
Hash
Der crc32c
-Hash, der das Castagnoli-Polynom verwendet,
wurde hinzugefügt. Diese CRC32-Variante wird in Speichersystemen wie iSCSI,
SCTP, Btrfs und ext4 verwendet.
Multibyte-Zeichenketten
Die Funktion mb_str_split() wurde hinzugefügt. Sie
bietet die gleiche Funktionalität wie str_split(),
arbeitet aber mit Codepunkten anstelle von Bytes.
Reguläre Ausdrücke (Perl-kompatibel)
Die Funktionen preg_replace_callback() und
preg_replace_callback_array() akzeptieren nun zusätzlich
den Parameter flags
, der die Flags
PREG_OFFSET_CAPTURE
und
PREG_UNMATCHED_AS_NULL
unterstützt. Dies beeinflusst
das Format des Arrays für die Übereinstimmungen, das an die
Callback-Funktion übergeben wird.
PDO
Bei den Treibern für mysql, mssql, dblib, firebird und oci können
Benutzername und Passwort nun als Teil des PDO DSN angegeben werden. Zuvor
wurde dies nur vom pgsql-Treiber unterstützt. Wenn ein Benutzername/Passwort
sowohl im Konstruktor als auch im DSN angegeben wird, hat der Konstruktor
Vorrang.
Es ist nun möglich, Fragezeichen in SQL-Abfragen zu maskieren, damit sie
nicht als als Platzhalter für Parameter interpretiert werden. Mit
??
ist es möglich, ein einzelnes Fragezeichen an die
Datenbank zu senden. Dieses kann z. B. bei PostgreSQL als
?
-Operator verwendet werden, um zu prüfen, ob ein
JSON-Schlüssel existiert.
PDO_SQLite
PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT)
ermöglicht es, zu prüfen, ob eine Anweisung nur lesend ist, d. h., ob sie
die Datenbank nicht verändert.
PDO::setAttribute(PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES, true)
ermöglicht in PDO::errorInfo() und
PDOStatement::errorInfo() die Verwendung der erweiterten
SQLite3-Ergebniscodes.
SQLite3
Die Methode SQLite3::lastExtendedErrorCode() wurde
hinzugefügt, um den letzten erweiterten Ergebniscode abzurufen.
SQLite3::enableExtendedResultCodes($enable = true)
wurde
hinzugefügt, was dazu führt, dass
SQLite3::lastErrorCode() erweiterte Ergebniscodes
zurückgibt.
Standard
Benutzerdefinierte Serialisierung von Objekten
Es wurde ein neues Verfahren für die benutzerdefinierte Serialisierung von
Objekten hinzugefügt, das zwei neue magische Methoden verwendet:
__serialize
und __unserialize
.
Das neue Serialisierungsverfahren ersetzt die Schnittstelle
Serializable, die in Zukunft für veraltet
erklärt werden wird.
Verwendung der array_merge-Funktionen ohne Parameter
Die Funktionen array_merge() und
array_merge_recursive() können nun auch ohne Parameter
aufgerufen werden und geben in diesem Fall ein leeres Array zurück. Dies
ist nützlich in Verbindung mit dem Spread-Operator (Zerlegungsoperator),
z. B. array_merge(...$arrays)
.
proc_open() akzeptiert für den Befehl nun ein Array
anstelle einer Zeichenkette. In diesem Fall wird der Prozess direkt
geöffnet (ohne den Umweg über eine Shell) und PHP kümmert sich bei Bedarf
darum, die Parameter zu maskieren.
proc_open() unterstützt nun die Deskriptoren
redirect
und null
.
argon2i(d) ohne libargon
Wenn PHP ohne libargon gebaut wird, hat password_hash()
nun die argon2i- und argon2id-Implementierungen aus der Erweiterung Sodium.