新機能
PHP コア
8進数の整数リテラルのプレフィックス指定
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 キーのサポート
ファイルアップロード時に、
追加で
full_path
キーを指定できるようになりました。
これにより、アップロードされるファイルの
(basename ではなく)
フルパスを指定できます。
これは、
"webkitdirectory" 属性
と組み合わせて使うことを意図しています。
列挙型(Enum)
列挙型 のサポートが追加されました。
ファイバー(Fibers)
ファイバー のサポートが追加されました。
第一級callableを生成する記法
myFunc(...)
という記法 で、
callable から無名関数を生成できるようになりました。
これは、
Closure::fromCallable('myFunc')
と同等です。
注意:
...
は文法の一部であり、省略形ではありません。
初期化時の new
式の許可
new ClassName()
式が、引数のデフォルト値の初期化時、
static 変数の初期化時、グローバルな定数の初期化時、
およびアトリビュートの引数として許可されるようになりました。
オブジェクトが define() に渡せるようにもなっています。
読み取り専用プロパティ
プロパティに対して、readonly が指定できるようになりました。
クラス定数の final 指定
クラスの定数に対して、 final が指定できる ようになりました。 また、インターフェイスの定数も、デフォルトでオーバーライド(上書き)できるようになりました。
CURL
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]);
?>
FPM
OpenMetrics status フォーマットが追加されました。 これは、Prometheus が FPM のメトリクスを取得する用途に使います。
pm.max_spawn_rate
と呼ばれる、
動的なプロセスマネージャーのための、
新しいプールオプションが追加されました。
これを指定することで、
動的なプロセスマネージャーを選択した場合に、
高速にたくさんの子プロセスが起動できるようになります。
これのデフォルト値は 32
で、
以前からハードコーディングされていたものです。
GD
libgd に Avif のサポートが組み込まれている場合に、 imagecreatefromavif() と imageavif() で Avif が使えるようになりました。
Hash
hash(),
hash_file(),
hash_init() 関数に、
オプションの引数 options
が追加されました。
これによって、ハッシュアルゴリズム特有のデータを渡せるようになります。
MurmurHash3
ストリーミングをサポートした
MurmurHash3
のサポートが追加されました。
以下のバリアントが実装されています:
- murmur3a, 32-bit hash
- murmur3c, 128-bit hash for x86
- murmur3f, 128-bit hash for x64
ハッシュの初期ステートを
引数 options
の
seed
キーを通じて渡すことができます。
たとえば、以下のように書くことができます:
<?php
$h = hash("murmur3f", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
0
から
プラットフォーム定義の UINT_MAX
までです。
この値は、通常は 4294967295
です。
xxHash
xxHash
のサポートが追加されました。
以下のバリアントが実装されています:
- xxh32, 32-bit hash
- xxh64, 64-bit hash
- xxh3, 64-bit hash
- xxh128, 128-bit hash
ハッシュの初期ステートを
引数 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
新しい INI ディレクティブ 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()
mysqli_result::fetch_column()
が追加されました。これによって、
結果セットから単一のスカラー値を取得することができるようになります。
この新しいメソッドは、
オプションの引数 column
に 0 から始まる整数値を指定することで、
どのカラムから情報を取得するかを指定できます。
<?php
$result = $mysqli->query('SELECT username FROM users WHERE id = 123');
echo $result->fetch_column();
?>
PDO
PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY
属性が追加されました。
これによって、ファイルを読み込むことを許可するディレクトリを指定できます。
これは、
PDO::MYSQL_ATTR_LOCAL_INFILE
が無効の場合にだけ意味があります。
なぜなら、
この場合に全てのディレクトリからのファイルの読み込みが許可されるからです。
PDO_SQLite
SQLite の
"file:"
DSN 記法がサポートされるようになり、
追加のフラグも指定できるようになりました。
この機能は、open_basedir が設定されている場合は使えません。
<?php
new PDO('sqlite:file:path/to/sqlite.db?mode=ro')
?>