Neue FeaturesPHP-KernTypisierte 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.
$n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
?>
]]>
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.
OPcache
Die Unterstützung für das
Vorladen von Code wurde
hinzugefügt.
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 &zb; bei PostgreSQL als
?-Operator verwendet werden, um zu prüfen, ob ein
JSON-Schlüssel existiert.
PDO_OCI
Die Methode PDOStatement::getColumnMeta ist nun
verfügbar.
PDO_SQLitePDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT)
ermöglicht es, zu prüfen, ob eine Anweisung nur lesend ist, &dh;, 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.
Standardstrip_tags() mit einem Array von Tag-Namen
Die Funktion strip_tags akzeptiert nun auch ein Array
mit erlaubten Tags: Anstelle von
strip_tags($str, '<a><p>') kann nun
strip_tags($str, ['a', 'p']) geschrieben werden.
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),
&zb; array_merge(...$arrays).
Die Funktion proc_openproc_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.
&1 in der Shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);
// Wie 2>/dev/null oder 2>nul in der Shell
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);
?>
]]>
argon2i(d) ohne libargon
Wenn PHP ohne libargon gebaut wird, hat password_hash
nun die argon2i- und argon2id-Implementierungen aus der Erweiterung Sodium.