PHP 8.4.1 Released!

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.

<?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.

Schnittmengentypen (Intersection-Typen)

Die Unterstützung für Schnittmengentypen wurde hinzugefügt.

Achtung

Schnittmengentypen 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.

Schreibgeschützte Eigenschaften

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:

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";
?>
Ein gültiger Seed-Wert liegt im Bereich von 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";
?>
Die Verwendung eines geheimen Parameters wird durch Übergeben des Schlüssels 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";
?>
Die Qualität des benutzerdefinierten geheimen Parameters ist entscheidend für die Qualität des resultierenden Hashes. Es wird dringend empfohlen, für den geheimen Parameter die bestmögliche Entropie zu verwenden.

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".

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top