Neue Features
PHP-Kern
Benannte Parameter
Die Unterstützung für benannte Parameter wurde hinzugefügt.
Attribute
Die Unterstützung für Attribute wurde hinzugefügt.
Beförderung von Konstruktoreigenschaften
Die Unterstützung für die Beförderung von Konstruktoreigenschaften (Deklaration von Eigenschaften in der Konstruktorsignatur) wurde hinzugefügt.
Zusammengefasste Typen (Union-Typen)
Die Unterstützung für zusammengefasste Typen wurde hinzugefügt.
Ausdruck match
Die Unterstützung für den
Ausdruck match
wurde hinzugefügt.
Nullsafe-Operator
Die Unterstützung für den
nullsafe-Operator
(?->
) wurde hinzugefügt.
Andere neue Features
-
Die Klasse WeakMap wurde hinzugefügt.
-
Die Klasse ValueError wurde hinzugefügt.
-
Eine beliebige Anzahl von Funktionsparametern kann nun durch einen variadischen Parameter ersetzt werden, solange die Typen kompatibel sind. Zum Beispiel ist der folgende Code nun erlaubt:
<?php
class A {
public function method(int $many, string $parameters, $here) {}
}
class B extends A {
public function method(...$everything) {}
}
?> -
static (wie in "late static binding", späte statische Bindung) kann nun als Rückgabetyp verwendet werden:
<?php
class Test {
public function create(): static {
return new static();
}
}
?> -
Es ist nun möglich, den Klassennamen eines Objekts mit Hilfe von
$object::class
zu ermitteln. Das Ergebnis ist dasselbe wie beiget_class($object)
. -
new
undinstanceof
können nun durch Verwendung vonnew (Ausdruck)(...$args)
und$obj instanceof (Ausdruck)
mit beliebigen Ausdrücken verwendet werden. -
Es wurden einige Verbesserungen an der Einheitlichkeit der Variablensyntax vorgenommen, zum Beispiel ist Folgendes nun erlaubt:
Foo::BAR::$baz
. -
Die Schnittstelle Stringable wurde hinzugefügt. Sie wird automatisch implementiert, wenn eine Klasse eine __toString()-Methode definiert.
-
Traits können nun abstrakte private Methoden definieren. Diese Methoden müssen von der Klasse implementiert werden, die den Trait verwendet.
-
throw
kann nun als Ausdruck verwendet werden. Das ermöglicht Verwendungen wie:<?php
$fn = fn() => throw new Exception('Exception in der Pfeilfunktion');
$user = $session->user ?? throw new Exception('Muss einen Benutzer haben'); -
In Parameterlisten ist nun ein optionales Komma am Ende erlaubt.
<?php
function functionWithLongSignature(
Type1 $parameter1,
Type2 $parameter2, // <-- Dieses Komma ist nun erlaubt.
) {
} -
Es ist nun möglich,
catch (Exception)
zu schreiben, um eine Ausnahme abzufangen, ohne sie in einer Variablen zu speichern. -
Die Unterstützung für den Typ mixed wurde hinzugefügt.
-
Private Methoden, die in einer übergeordneten Klasse deklariert wurden, erzwingen für die Methoden einer Kindklasse keine Vererbungsregeln mehr (mit Ausnahme von finalen privaten Konstruktoren). Das folgende Beispiel veranschaulicht, welche Einschränkungen aufgehoben wurden:
<?php
class ParentClass {
private function method1() {}
private function method2() {}
private static function method3() {}
// Löst eine Warnung aus, da "final" keine Bedeutung mehr hat:
private final function method4() {}
}
class ChildClass extends ParentClass {
// Alles Folgende ist nun erlaubt, auch wenn die Modifikatoren nicht
// dieselben sind wie bei den privaten Methoden in der Elternklasse.
public abstract function method1() {}
public static function method2() {}
public function method3() {}
public function method4() {}
}
?> -
Die Funktion get_resource_id() wurde hinzugefügt. Sie gibt denselben Wert zurück wie
(int) $resource
und bietet dieselbe Funktionalität mit einer übersichtlicheren API.
Datum und Uhrzeit
-
Die Methoden DateTime::createFromInterface() und DateTimeImmutable::createFromInterface() wurden hinzugefügt.
-
Für DateTime wurde die Formatangabe
p
hinzugefügt, die ähnlich ist wieP
, aber für UTCZ
anstelle von+00:00
zurückgibt.
DOM
Die Schnittstellen DOMParentNode und DOMChildNode mit neuen Traversal- und Kontroll-APIs wurden hinzugefügt.
Filter
FILTER_VALIDATE_BOOL
wurde als Alias für
FILTER_VALIDATE_BOOLEAN
hinzugefügt. Der neue Name
sollte bevorzugt werden, weil er den kanonischen Typnamen verwendet.
Enchant
Die Funktionen enchant_dict_add(),
enchant_dict_is_added() und die Konstante
LIBENCHANT_VERSION
wurden hinzugefügt.
FPM
Die neue Option pm.status_listen
wurde hinzugefügt. Sie
ermöglicht es, den Status von einem anderen Endpunkt zu erhalten (z. B.
Port oder UDS-Datei). Dies ist nützlich, um den Status zu erhalten, wenn
alle Kindprozesse mit der Bearbeitung lang laufender Anfragen beschäftigt
sind.
Hash
HashContext-Objekte können nun serialisiert werden.
Funktionen für die Internationalisierung
Die Konstanten IntlDateFormatter::RELATIVE_FULL
,
IntlDateFormatter::RELATIVE_LONG
,
IntlDateFormatter::RELATIVE_MEDIUM
und
IntlDateFormatter::RELATIVE_SHORT
wurden hinzugefügt.
LDAP
Die Funktion ldap_count_references() wurde hinzugefügt; sie gibt die Anzahl der Referenzmeldungen in einem Suchergebnis zurück.
OPcache
Wenn die ini-Einstellung opcache.record_warnings aktiviert ist, zeichnet OPcache die Warnungen auf, die bei der Kompilierung auftreten, und gibt sie beim nächsten Include wieder, auch wenn sie aus dem Cache geliefert werden.
OpenSSL
Die Unterstützung für die Cryptographic Message Syntax (CMS)
(» RFC 5652), die aus Funktionen zum
Verschlüsseln, Entschlüsseln, Signieren, Überprüfen und Lesen besteht,
wurde hinzugefügt. Die API ist der API für PKCS-#7-Funktionen ähnlich und
enthält darüber hinaus folgende neue Verschlüsselungskonstanten:
OPENSSL_ENCODING_DER
,
OPENSSL_ENCODING_SMIME
und
OPENSSL_ENCODING_PEM
:
- openssl_cms_encrypt() verschlüsselt die Nachricht in der Datei mit den Zertifikaten und gibt das Ergebnis in der angegebenen Datei aus.
- openssl_cms_decrypt() entschlüsselt die S/MIME-Nachricht in der Datei und gibt das Ergebnis in der angegebenen Datei aus.
- openssl_cms_read() exportiert die CMS-Datei in ein Array von PEM-Zertifikaten.
- openssl_cms_sign() signiert die MIME-Nachricht in der Datei mit einem Zertifikat und einem Schlüssel und gibt das Ergebnis in der angegebenen Datei aus.
- openssl_cms_verify() verifiziert, dass der Datenblock intakt ist, der Unterzeichner der ist, für den er sich ausgibt, und gibt die Zertifikate der Unterzeichner zurück.
Reguläre Ausdrücke (Perl-kompatibel)
Die Funktion preg_last_error_msg() wurde hinzugefügt. Sie gibt eine menschenlesbare Meldung für den letzten PCRE-Fehler zurück und ergänzt die Funktion preg_last_error(), die einen Integer-Enum-Wert zurückgibt.
Reflection
-
Die folgenden Methoden können nun Informationen über die Standardwerte der Parameter interner Funktionen zurückgeben:
SQLite3
Die Methode SQLite3::setAuthorizer() und entsprechende Klassenkonstanten wurden hinzugefügt. Damit ist es möglich, eine benutzerdefinierte Callback-Funktion anzugeben, die verwendet wird, um eine Aktion in der Datenbank zu autorisieren oder nicht.
Standard-Funktionsbibliothek
-
Die Funktionen str_contains(), str_starts_with() und str_ends_with() wurden hinzugefügt. Sie prüfen, ob
haystack
needle
enthält bzw. damit beginnt oder endet. -
Die Funktion fdiv() wurde hinzugefügt. Sie führt eine Gleitkomma-Division nach IEEE 754-Semantik durch. Die Division durch Null wird als wohldefiniert betrachtet und gibt einen der Werte
Inf
,-Inf
oderNaN
zurück. -
Die Funktion get_debug_type() wurde hinzugefügt. Sie gibt einen Typ zurück, der für Fehlermeldungen nützlich ist. Anders als gettype() verwendet sie kanonische Typnamen, gibt die Klassennamen von Objekten zurück und nennt bei Ressourcen den Ressourcentyp.
-
Die Funktionen printf() und Freunde unterstützen nun die Formatangaben
%h
und%H
. Diese sind vergleichbar mit%g
und%G
, verwenden aber immer"."
als Dezimaltrennzeichen, anstatt es durch dieLC_NUMERIC
-Locale zu bestimmen. -
Die Funktionen printf() und Freunde unterstützen nun die Verwendung von
"*"
als Breite oder Genauigkeit. In diesem Fall wird die Breite/Genauigkeit als Parameter an printf übergeben. Außerdem ermöglicht dies bei%g
,%G
,%h
und%H
die Verwendung der Genauigkeit-1
. Zum Beispiel kann der folgende Code verwendet werden, um die standardmäßige Gleitkomma-Formatierung von PHP zu reproduzieren:<?php
printf("%.*H", (int) ini_get("precision"), $float);
printf("%.*H", (int) ini_get("serialize_precision"), $float);
?> -
Die Funktion proc_open() unterstützt nun Pseudo-Terminal (PTY)-Deskriptoren. Das folgende hängt
stdin
,stdout
undstderr
an dasselbe PTY an:<?php
$proc = proc_open($command, [['pty'], ['pty'], ['pty']], $pipes);
?> -
proc_open() unterstützt nun Socket-Paar-Deskriptoren. Das folgende fügt ein bestimmtes Socket-Paar an
stdin
,stdout
undstderr
an:<?php
$proc = proc_open($command, [['socket'], ['socket'], ['socket']], $pipes);
?>Im Gegensatz zu Pipes gibt es bei Sockets unter Windows keine Probleme mit blockierenden I/Os. Allerdings funktionieren nicht alle Programme korrekt mit stdio-Sockets.
-
Die Sortierfunktionen verwenden nun eine stabile Sortierung. Das bedeutet, dass Elemente, die verglichen und für gleich befunden werden, ihre ursprüngliche Reihenfolge beibehalten.
-
Die Funktionen array_diff(), array_intersect() und ihre Variationen können nun mit einem einzigen Array als Parameter verwendet werden. Das bedeutet, dass Verwendungen wie die folgende nun möglich sind:
<?php
// OK, auch wenn $excludes leer ist:
array_diff($array, ...$excludes);
// OK, auch wenn $arrays nur ein einziges Array enthält:
array_intersect(...$arrays);
?> -
Der Parameter
flag
der Funktion ob_implicit_flush() akzeptiert nun ein bool anstelle eines int.
Tokenizer
Die Klasse PhpToken fügt dem Tokenizer eine objektbasierte Schnittstelle hinzu. Diese Klasse bietet eine einheitlichere und ergonomischere Darstellung ist zudem speichereffizienter und schneller.
Zip
-
Die Erweiterung Zip wurde auf die Version 1.19.1 aktualisiert.
-
Neue Methoden ZipArchive::setMtimeName() und ZipArchive::setMtimeIndex(), um die Änderungszeit eines Eintrags festzulegen.
-
Neue Methode ZipArchive::registerProgressCallback(), um Aktualisierungen beim Schließen eines Archivs bereitzustellen.
-
Neue Methode ZipArchive::registerCancelCallback(), um einen Abbruch während des Schließens eines Archivs zu ermöglichen.
-
Neue Methode ZipArchive::replaceFile(), um den Inhalt eines Eintrags zu ersetzen
-
Neue Methode ZipArchive::isCompressionMethodSupported(), um auf optionale Komprimierungsfunktionen zu prüfen.
-
Neue Methode ZipArchive::isEncryptionMethodSupported(), um auf optionale Verschlüsselungsfunktionen zu prüfen.
-
Die Eigenschaft ZipArchive::lastId wurde hinzugefügt, um den Indexwert des zuletzt eingefügten Eintrags zu erhalten.
-
Mit den Eigenschaften ZipArchive::status und ZipArchive::statusSys oder der Methode ZipArchive::getStatusString() können nun Fehler nach dem Schließen eines Archivs überprüft werden.
-
Die Option
'remove_path'
der Methoden ZipArchive::addGlob() und ZipArchive::addPattern() wird nun als beliebiges Zeichenketten-Präfix behandelt (um mit der Option'add_path'
konsistent zu sein), während sie früher als Verzeichnisname behandelt wurde. -
Optionale Komprimierungs- und Verschlüsselungsfunktionen werden nun in phpinfo aufgelistet.