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.
<?php
014; // Oktales Literal ohne Präfix
0o14; // Oktales Literal mit Präfix
?>
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']
?>
Es ist nun möglich, benannte Parameter nach einem entpackten Parameter anzugeben. z. B. foo(...$args, named: $arg).
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.
Die Unterstützung für Aufzählungen wurde hinzugefügt.
Die Unterstützung für Fibers wurde hinzugefügt.
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.
Die Unterstützung für Schnittmengentypen wurde hinzugefügt.
Schnittmengentypen können nicht zusammen mit zusammengefassten Typen (Union-Typen) verwendet werden.
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.
Die Unterstützung für readonly wurde hinzugefügt.
Die Unterstützung für den Modifikator final für Klassenkonstanten wurde hinzugefügt. Außerdem werden Schnittstellenkonstanten standardmäßig überschreibbar.
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]);
?>
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.
Wenn libgd mit Avif-Unterstützung gebaut wurde, steht die Unterstützung von Avif nun über die Funktionen imagecreatefromavif() und imageavif() zur Verfügung.
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.
Die Unterstützung für MurmurHash3
mit der Unterstützung
für Streaming wurde hinzugefügt. Die folgenden Varianten sind
implementiert:
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
.
Die Unterstützung für xxHash
wurde hinzugefügt. Die
folgenden Varianten sind implementiert:
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.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.
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]);
?>
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();
?>
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.
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_RLIMIT_KQUEUES
und
POSIX_RLIMIT_NPTS
wurden hinzugefügt. Diese rlimits
sind nur unter FreeBSD verfügbar.
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"
.
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"
.