8進数の整数値の場合に、 数値リテラルのプレフィックスとして明示的に 0o
や 0O
を指定できるようになりました。 これは、2進数や16進数の整数リテラルの表記と似ています。
<?php
014; // プレフィックス指定がない 8進数のリテラル
0o14; // プレフィックスを指定した 8進数のリテラル
?>
文字列をキーとして持つ 配列をアンパック できるようになりました。
<?php
$arr1 = [1, 'a' => 'b'];
$arr2 = [...$arr1, 'c' => 'd']; //[1, 'a' => 'b', 'c' => 'd']
?>
引数を ... で展開した後に、名前付き引数を指定できるようになりました。 e.g. foo(...$args, named: $arg).
ファイルアップロード時に、 追加で full_path
キーを指定できるようになりました。 これにより、アップロードされるファイルの (basename ではなく) フルパスを指定できます。 これは、 "webkitdirectory" 属性 と組み合わせて使うことを意図しています。
列挙型 のサポートが追加されました。
ファイバー のサポートが追加されました。
myFunc(...)
という記法 で、 callable から無名関数を生成できるようになりました。 これは、 Closure::fromCallable('myFunc')
と同等です。
注意:
...
は文法の一部であり、省略形ではありません。
new
式の許可new ClassName()
式が、引数のデフォルト値の初期化時、 static 変数の初期化時、グローバルな定数の初期化時、 およびアトリビュートの引数として許可されるようになりました。 オブジェクトが define() に渡せるようにもなっています。
プロパティに対して、readonly が指定できるようになりました。
クラスの定数に対して、 final が指定できる ようになりました。 また、インターフェイスの定数も、デフォルトでオーバーライド(上書き)できるようになりました。
CURLOPT_DOH_URL
オプションが追加されました。
libcurl >= 7.71.0 で、 証明書を blob 経由で扱うためのオプションが追加されました。
CURLOPT_ISSUERCERT_BLOB
CURLOPT_PROXY_ISSUERCERT
CURLOPT_PROXY_ISSUERCERT_BLOB
CURLOPT_PROXY_SSLCERT_BLOB
CURLOPT_PROXY_SSLKEY_BLOB
CURLOPT_SSLCERT_BLOB
CURLOPT_SSLKEY_BLOB
ファイルをファイル経由ではなく、 文字列で POST するために使える CURLStringFile クラスが追加されました。
<?php
$file = new CURLStringFile($data, 'filename.txt', 'text/plain');
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => $file]);
?>
OpenMetrics status フォーマットが追加されました。 これは、Prometheus が FPM のメトリクスを取得する用途に使います。
pm.max_spawn_rate
と呼ばれる、 動的なプロセスマネージャーのための、 新しいプールオプションが追加されました。 これを指定することで、 動的なプロセスマネージャーを選択した場合に、 高速にたくさんの子プロセスが起動できるようになります。 これのデフォルト値は 32
で、 以前からハードコーディングされていたものです。
libgd に Avif のサポートが組み込まれている場合に、 imagecreatefromavif() と imageavif() で Avif が使えるようになりました。
hash(), hash_file(), hash_init() 関数に、 オプションの引数 options
が追加されました。 これによって、ハッシュアルゴリズム特有のデータを渡せるようになります。
ストリーミングをサポートした MurmurHash3
のサポートが追加されました。 以下のバリアントが実装されています:
ハッシュの初期ステートを 引数 options
の seed
キーを通じて渡すことができます。 たとえば、以下のように書くことができます:
<?php
$h = hash("murmur3f", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
0
から プラットフォーム定義の UINT_MAX
までです。 この値は、通常は 4294967295
です。 xxHash
のサポートが追加されました。 以下のバリアントが実装されています:
ハッシュの初期ステートを 引数 options
の seed
キーを通じて渡すことができます。 たとえば、以下のように書くことができます:
<?php
$h = hash("xxh3", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
options
の secret
キーを通じて渡すこともできます: <?php
$h = hash("xxh3", $data, options: ["secret" => "at least 136 bytes long secret here"]);
echo $h, "\n";
?>
mysqli.local_infile_directory
mysqlnd.local_infile_directory ディレクティブが追加されました。 これによって、ファイルを読み込むことを許可するディレクトリを指定できます。 これは、 mysqli.allow_local_infile が無効の場合にだけ意味があります。 なぜなら、 この場合に全てのディレクトリからのファイルの読み込みが許可されるからです。
mysqli_stmt::execute() に配列を指定することで、引数をバインドできるようになりました。 全ての値が、文字列としてバインドされます。 (連想配列でない) リストだけを指定できます。 この新機能は、MySQLi を libmysqlclient を使ってコンパイルしている場合には利用できません。
<?php
$stmt = $mysqli->prepare('INSERT INTO users(id, name) VALUES(?,?)');
$stmt->execute([1, $username]);
?>
mysqli_result::fetch_column() が追加されました。これによって、 結果セットから単一のスカラー値を取得することができるようになります。 この新しいメソッドは、 オプションの引数 column
に 0 から始まる整数値を指定することで、 どのカラムから情報を取得するかを指定できます。
<?php
$result = $mysqli->query('SELECT username FROM users WHERE id = 123');
echo $result->fetch_column();
?>
PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY
属性が追加されました。 これによって、ファイルを読み込むことを許可するディレクトリを指定できます。 これは、 PDO::MYSQL_ATTR_LOCAL_INFILE
が無効の場合にだけ意味があります。 なぜなら、 この場合に全てのディレクトリからのファイルの読み込みが許可されるからです。
SQLite の "file:"
DSN 記法がサポートされるようになり、 追加のフラグも指定できるようになりました。 この機能は、open_basedir が設定されている場合は使えません。
<?php
new PDO('sqlite:file:path/to/sqlite.db?mode=ro')
?>
POSIX_RLIMIT_KQUEUES
と POSIX_RLIMIT_NPTS
が追加されました。 これらの rlimits は、FreeBSD でのみ利用可能です。
fputcsv() は、 新しい引数 eol
を受け入れるようになりました。 これによって、カスタムの改行文字を定義できるようになります。 デフォルトは以前と同じで、"\n"
のままです。
SplFileObject::fputcsv() は、 新しい引数 eol
を受け入れるようになりました。 これによって、カスタムの改行文字を定義できるようになります。 デフォルトは以前と同じで、"\n"
のままです。