Neue Features
PHP-Kern
Präfix für oktale Integer-Literale
Bei oktalen Integern ist es nun möglich, explizit 0o
oder 0O
als Präfix für numerische Literale anzugeben.
Dies entspricht der Notation für binäre und hexadezimale Integer-Literale. Octal integers can now use an explicit
<?php
014; // Oktales Literal ohne Präfix
0o14; // Oktales Literal mit Präfix
?>
Entpacken von Arrays mit String-Schlüsseln
Die Unterstützung für das Entpacken von Arrays mit String-Schlüsseln wurde hinzugefügt.
<?php
$arr1 = [1, 'a' => 'b'];
$arr2 = [...$arr1, 'c' => 'd']; //[1, 'a' => 'b', 'c' => 'd']
?>
Benannter Parameter nach dem Entpacken von Parametern
Es ist nun möglich, benannte Parameter nach einem entpackten Parameter anzugeben. z. B. foo(...$args, named: $arg).
Vollständiger Pfad beim Hochladen von Dateien
Datei-Uploads bieten nun einen zusätzlichen
full_path
-Schlüssel, der den vollständigen Pfad (und
nicht nur den Basisnamen) der hochgeladenen Datei enthält. Dies ist für
die Verwendung in Verbindung mit dem HTML-Attribut "webkitdirectory"
gedacht.
Aufzählungen
Die Unterstützung für Aufzählungen wurde hinzugefügt.
Fibers
Die Unterstützung für Fibers wurde hinzugefügt.
Callback-Funktionen als Objekte erster Klasse
Closures für Callback-Funktionen können nun mit
der Syntax myFunc(...)
erstellt werden, die identisch ist zu
Closure::fromCallable('myFunc')
.
Hinweis: Das
...
ist keine Auslassung, sondern Teil der Syntax.
Überschneidungstypen (Intersection-Typen)
Die Unterstützung für Überschneidungstypen wurde hinzugefügt.
Überschneidungstypen können nicht zusammen mit zusammengefassten Typen (Union-Typen) verwendet werden.
Never-Typ
Der neue Rückgabetyp never wurde hinzugefügt. Dieser zeigt an, dass eine Funktion entweder exit() aufruft, eine Exception auslöst, oder nicht beendet wird.
new
in Initialisierungen
Es ist nun möglich, new ClassName()
-Ausdrücke als
Standardwert für die Initialisierung von Parametern, statischen Variablen
und globalen Konstanten und als Eigenschafts-Parameter zu verwenden.
Objekte können nun ebenfalls an define() übergeben
werden.
Eigenschaften, die nur gelesen werden können
Die Unterstützung für readonly wurde hinzugefügt.
Finale Klassenkonstanten
Die Unterstützung für den Modifikator final für Klassenkonstanten wurde hinzugefügt. Außerdem werden Schnittstellenkonstanten standardmäßig überschreibbar.
CURL
Die Option CURLOPT_DOH_URL
wurde hinzugefügt.
Zusätzliche Optionen für Blob-Zertifikate, falls libcurl >= 7.71.0:
-
CURLOPT_ISSUERCERT_BLOB
-
CURLOPT_PROXY_ISSUERCERT
-
CURLOPT_PROXY_ISSUERCERT_BLOB
-
CURLOPT_PROXY_SSLCERT_BLOB
-
CURLOPT_PROXY_SSLKEY_BLOB
-
CURLOPT_SSLCERT_BLOB
-
CURLOPT_SSLKEY_BLOB
Die Klasse CURLStringFile wurde hinzugefügt. Sie kann dazu verwendet werden, statt einer Datei eine Datei aus einem String zu senden:
<?php
$datei = new CURLStringFile($daten, 'dateiname.txt', 'text/plain');
curl_setopt($curl, CURLOPT_POSTFIELDS, ['datei' => $datei]);
?>
FPM
Ein Openmetrics-Statusformat wurdet hinzugefügt. Es kann von Prometheus verwendet werden, um FPM-Metriken abzurufen.
Für den dynamischen Prozessmanager wurde eine neue Pool-Option namens
pm.max_spawn_rate
hinzugefügt. Sie ermöglicht ein
schnelleres Starten einer Anzahl von Kindprozessen, wenn dynamisches PM
ausgewählt ist. Der Standardwert ist 32
, was der
vorherige fest kodierte Wert war.
GD
Wenn libgd mit Avif-Unterstützung gebaut wurde, steht die Unterstützung von Avif nun über die Funktionen imagecreatefromavif() und imageavif() zur Verfügung.
Hash
Die Funktionen hash(), hash_file()
und hash_init() unterstützen nun zusätzlich den
optionalen Parameter options
, der zur Übergabe von
Algorithmus-spezifischen Daten verwendet werden kann.
MurmurHash3
Die Unterstützung für MurmurHash3
mit der Unterstützung
für Streaming wurde hinzugefügt. Die folgenden Varianten sind
implementiert:
- murmur3a, 32-Bit-Hash
- murmur3c, 128-Bit-Hash für x86
- murmur3f, 128-Bit-Hash für x64
Der anfängliche Hash-Status kann durch den Schlüssel
seed
im Array options
übergeben
werden, zum Beispiel:
<?php
$h = hash("murmur3f", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
0
bis zum
plattformdefinierten UINT_MAX
, normalerweise
4294967295
.
xxHash
Die Unterstützung für xxHash
wurde hinzugefügt. Die
folgenden Varianten sind implementiert:
- xxh32, 32-Bit-Hash
- xxh64, 64-Bit-Hash
- xxh3, 64-Bit-Hash
- xxh128, 128-Bit-Hash
Der anfängliche Hash-Status kann durch den Schlüssel
seed
im Array options
übergeben
werden, zum Beispiel:
<?php
$h = hash("xxh3", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
secret
im Array
options
ebenfalls unterstützt:
<?php
$h = hash("xxh3", $data, options: ["secret" => "das Geheimnis muss hier mindestens 136 Bytes lang sein"]);
echo $h, "\n";
?>
MySQLi
Neue INI-Directive mysqli.local_infile_directory
Die INI-Direktive mysqli.local_infile_directory wurde hinzugefügt. Sie kann verwendet werden, um ein Verzeichnis anzugeben, aus dem aus dem Dateien geladen werden dürfen. Sie ist nur dann relevant, wenn mysqli.allow_local_infile nicht aktiviert ist, da in diesem Fall alle Verzeichnisse erlaubt sind.
Parameter in execute binden
Es ist nun möglich, Parameter zu binden, indem sie als Array an mysqli_stmt::execute() übergeben werden. Alle Werte werden als Zeichenketten gebunden. Nur Listen-Arrays sind erlaubt. Diese neue Funktion ist nicht verfügbar wenn MySQLi mit libmysqlclient kompiliert wurde.
<?php
$stmt = $mysqli->prepare('INSERT INTO users(id, name) VALUES(?,?)');
$stmt->execute([1, $username]);
?>
Neue Methode mysqli_result::fetch_column()
Die Methode mysqli_result::fetch_column() wurde
hinzugefügt, um das Abrufen eines einzelnen skalaren Werts aus der
Ergebnismenge zu ermöglichen. Die neue Methode akzeptiert den optionalen
0-basierten Parameter column
vom Typ Integer, der
angibt, aus welcher Spalte abgerufen werden soll.
<?php
$result = $mysqli->query('SELECT username FROM users WHERE id = 123');
echo $result->fetch_column();
?>
PDO
Die Eigenschaft PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY
wurde hinzugefügt. Damit kann ein Verzeichnis angegeben werden, aus dem
Dateien geladen werden dürfen. Sie ist nur dann relevant, wenn
PDO::MYSQL_ATTR_LOCAL_INFILE
nicht aktiviert ist, da
in diesem Fall alle Verzeichnisse erlaubt sind.
PDO_SQLite
Die DSN-Syntax "file:"
von SQLite wird nun unterstützt,
was die Angabe zusätzlicher Flags ermöglicht. Dieses Feature ist nicht
verfügbar, wenn open_basedir gesetzt ist.
<?php
new PDO('sqlite:file:path/to/sqlite.db?mode=ro')
?>
POSIX
POSIX_RLIMIT_KQUEUES
und
POSIX_RLIMIT_NPTS
wurden hinzugefügt. Diese rlimits
sind nur unter FreeBSD verfügbar.
Standard
Die Funktion fputcsv() akzeptiert nun den neuen
Parameter eol
, mit dem eine eigene Sequenz für das
Zeilenende definiert werden kann. Die Vorgabe bleibt dieselbe wie bisher:
"\n"
.
SPL
Die Methode SplFileObject::fputcsv() akzeptiert nun
den neuen Parameter eol
, mit dem eine eigene Sequenz
für das Zeilenende definiert werden kann. Die Vorgabe bleibt dieselbe wie
bisher: "\n"
.