新機能
PHP コア
プロパティフック
オブジェクトのプロパティは、
get
および set
操作に
追加のロジックを関連付けることができるようになりました。
使用方法に応じてそのプロパティは、値を持つ場合もありますし、
仮想的、つまり値を持たない場合もあります。
非対称可視性プロパティ
オブジェクトのプロパティは、set
の可視性を get
の可視性とは別に制御できるようになりました。
レイジーオブジェクト
アクセスされるまで初期化が延期されるオブジェクトを作成できるようになりました。
ライブラリやフレームワークは、これらのレイジーオブジェクトを利用して、
初期化に必要なデータや依存関係の取得を遅延させることができます。
#[\Deprecated]
アトリビュート
新しい Deprecated 属性を使用して、関数、メソッド、
およびクラス定数を非推奨としてマークできます。このアトリビュートで非推奨となった機能の動作は、
PHP 自身が提供する既存の非推奨メカニズムの動作と一致します。
唯一の例外は、発生するエラーコードが
E_DEPRECATED
ではなく E_USER_DEPRECATED
であることです。
PHP 自身が提供する機能の既存の非推奨は、この属性を使用するように更新され、
短い説明を含むことでエラーメッセージが改善されました。
POST 以外の HTTP リクエストでの RFC1867 (マルチパート)リクエストの解析
POST 以外の HTTP リクエストで RFC1867(マルチパート)リクエストを解析するための
request_parse_body 関数が追加されました。
括弧なしでの new
式のチェーン
コンストラクタ引数を持つ new
式は直接参照できるようになり、
式を括弧で囲むことなくメソッド呼び出しや
プロパティアクセスなどのチェーンが可能になりました。
WeakReference のデバッグ情報の改善
WeakReference のデバッグ情報を取得すると、
参照しているオブジェクト、または参照が無効になっている場合は
null
が出力されるようになりました。
Closure のデバッグ情報の改善
Closure::__debugInfo の出力には、
Closure の名前、ファイル名、および行が含まれるようになりました。
異なる名前空間ブロックで同一のシンボルを定義
名前空間を終了すると、そこで定義されたシンボルがクリアされるようになりました。
これにより、以前の名前空間ブロックで同じ名前のシンボルが宣言されていても、
名前空間ブロック内でシンボルを使用できるようになりました。
cURL
curl_version は、新たに
feature_list
値を返すようになりました。これは、
既知のすべての cURL 機能と、それらがサポートされているか(true
)されていないか
(false
)を示す連想配列です。
CURLOPT_HTTP_VERSION
のオプションとして、
CURL_HTTP_VERSION_3
および
CURL_HTTP_VERSION_3ONLY
定数
(libcurl 7.66 および 7.88 から利用可能)
が追加されました。
cURL オプションとしてCURLOPT_PREREQFUNCTION
が追加されました。
接続が確立された後、リクエストが送信される前に呼び出される
callable を受け入れます。
この callable は、リクエストを許可または中止するために CURL_PREREQFUNC_OK
または
CURL_PREREQFUNC_ABORT
のいずれかを返す必要があります。
CURLOPT_SERVER_RESPONSE_TIMEOUT
が追加されました。
これは以前は CURLOPT_FTP_RESPONSE_TIMEOUT
として知られていました。
両方の定数は同じ値を持ちます。
cURL オプションとして CURLOPT_DEBUGFUNCTION
が追加されました。
リクエストの実行中に呼び出される callable を受け入れます。
この callable は、CurlHandle オブジェクト、
デバッグメッセージの種類を含む整数、
およびデバッグメッセージを含む文字列を受け取ります。
デバッグメッセージの種類は、次の定数のいずれかです:
CURLINFO_TEXT
CURLINFO_HEADER_IN
CURLINFO_HEADER_OUT
CURLINFO_DATA_IN
CURLINFO_DATA_OUT
CURLINFO_SSL_DATA_IN
CURLINFO_SSL_DATA_OUT
このオプションを設定した場合、
CURLINFO_HEADER_OUT
を設定してはいけません。
同じ libcurl の機能を使用するためです。
curl_getinfo は、新たに
posttransfer_time_us
キーを返すようになりました。
これは、開始から最後のバイトが送信されるまでのマイクロ秒数を示します。
リダイレクトが行われた場合、各リクエストの時間が合計されます。
この値は、curl_getinfo の
option
パラメータに
CURLINFO_POSTTRANSFER_TIME_T
を渡すことでも取得できます。
libcurl 8.10.0 以降が必要です。
DOM
Dom 名前空間と、既存の DOM クラスに対応する
新たなクラスが追加されました(例: Dom\Node は
DOMNode に対応する新しいクラスです)。
これらのクラスは HTML 5 に対応しており、WHATWG の仕様に準拠しています。
これは DOM 拡張の長年のバグを解決します。
従来の DOM クラスも後方互換性のために引き続き利用可能です。
DOMNode::compareDocumentPosition
と関連する定数が追加されました:
DOMNode::DOCUMENT_POSITION_DISCONNECTED
DOMNode::DOCUMENT_POSITION_PRECEDING
DOMNode::DOCUMENT_POSITION_FOLLOWING
DOMNode::DOCUMENT_POSITION_CONTAINS
DOMNode::DOCUMENT_POSITION_CONTAINED_BY
DOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
DOMXPath::registerPhpFunctions
に任意の callable を渡すことが可能になりました。
さらに、 DOMXPath::registerPhpFunctionNs により、
php:function('name')
ではなく、ネイティブな関数呼び出し構文で
コールバックを登録できるようになりました。
Intl
NumberFormatter::ROUND_HALFODD
が追加されました。
既存の NumberFormatter::ROUND_HALFEVEN
機能を
補完します。
OpenSSL
Curve25519 および Curve448 ベースのキーのサポートが追加されました。
具体的には、x25519、ed25519、x448、ed448 フィールドが
openssl_pkey_new、
openssl_pkey_get_details、
openssl_sign、および
openssl_verify を、サポートするよう拡張されました。
パスワードのハッシュ方法として PASSWORD_ARGON2 が実装されました。
これは OpenSSL 3.2 および NTS ビルドが必要です。
PCRE
同梱の pcre2lib がバージョン 10.44 に更新されました。
これにより、LoongArch JIT サポートが追加され、
Perl 互換のアイテムで波括弧間のスペースが許可され、
可変長の後読みアサーションがサポートされるようになりました。
pcre2lib バージョン 10.44 では、名前付きキャプチャグループの最大長が
32
から 128
に変更されました。
r
(PCRE2_EXTRA_CASELESS_RESTRICT)
修飾子と (?r)
モード修飾子のサポートされました。
大文字・小文字を区別しない修飾子 (i
) と一緒に有効にすると、
ASCII と非 ASCII 文字の混在が禁止されます。
PDO
ドライバ固有のサブクラスのサポートが追加されました。
PDO のサブクラスを追加することで、
データベース固有の機能のサポートを向上します。
新しいクラスは、 PDO::connect メソッドを呼び出すか、
ドライバ固有のサブクラスを直接インスタンス化することで
利用できます。
ドライバ固有の SQL パーサーのサポートが追加されました。
デフォルトのパーサーは以下をサポートします:
-
シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化によるエスケープ
-
2 つのハイフンとネストされていない C スタイルのコメント
PDO_MYSQL
以下をサポートするカスタムパーサーが追加されました:
-
シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化やバックスラッシュによる
エスケープ
-
バッククオートで囲まれたリテラルでのクオートの二重化によるエスケープ
-
1 つの空白が続く 2 つのハイフン、ネストされていない C スタイルのコメント、
#
によるコメント
PDO_PGSQL
以下をサポートするカスタムパーサーが追加されました:
-
シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化によるエスケープ
-
C スタイルの「エスケープ」文字列リテラル (
E'string'
)
-
ドル記号で囲まれた文字列リテラル
-
2 つのハイフンとネストされていない C スタイルのコメント
-
?
演算子のエスケープシーケンスとしての ??
のサポート
PDO_SQLITE
以下をサポートするカスタムパーサーが追加されました:
-
シングルクオート、ダブルクオート、バッククオートで囲まれたリテラルでのクオートの二重化による
エスケープ
-
識別子の角括弧によるクオート
-
2 つのハイフンとネストされていない C スタイルのコメント
Phar
Zip アーカイブの Unix タイムスタンプ拡張のサポートが追加されました。
Readfile
PHP_HISTFILE 環境変数を利用し
.php_history
パスを変更する機能が追加されました。
Reflection
ReflectionAttribute に
デバッグ体験を向上させるための name プロパティが追加されました。
ReflectionClassConstant::__toStringおよび
ReflectionProperty::__toString は、
添付されたドキュメントコメントを返すようになりました。
レイジーオブジェクト機能に関連する複数の新しいメソッドと定数が
追加されました:
-
ReflectionClass::newLazyGhost
-
ReflectionClass::newLazyProxy
-
ReflectionClass::resetAsLazyGhost
-
ReflectionClass::resetAsLazyProxy
-
ReflectionClass::isUninitializedLazyObject
-
ReflectionClass::initializeLazyObject
-
ReflectionClass::markLazyObjectAsInitialized
-
ReflectionClass::getLazyInitializer
-
ReflectionProperty::skipLazyInitialization
-
ReflectionProperty::setRawValueWithoutLazyInitialization
-
ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
-
ReflectionClass::SKIP_DESTRUCTOR
SOAP
クラスマップでの名前空間のクラーク式記法のサポートが追加されました。
クラスマップ内でクラーク式記法を使用して、
特定の名前空間の型を特定のクラスに解決するエントリを指定できるようになりました。
例: '{http://example.com}foo' => 'FooClass'
DateTimeInterface のインスタンスが
xsd:datetime
や類似の要素に渡されると、
空の文字列としてではなく、そのままシリアライズされるようになりました。
持続的セッションが共有セッションモジュールで動作するようになりました。
Standard
RoundingMode 列挙型が追加されました。
PHP_ROUND_*
定数より
明確な名前と発見性を提供します。
さらに、4 つの新しい丸めモードが追加されました。これらは
RoundingMode 列挙型を介してのみ利用可能です。
XSL
シングルクオートとダブルクオートの両方を含むパラメータを
使用できるようになりました。
XSLTProcessor::registerPhpFunctions に
任意の callable を渡すことが可能になりました。
XSLTProcessor::$maxTemplateDepth および
XSLTProcessor::$maxTemplateVars が追加されました。
XSL テンプレート評価の再帰の深さを制御することができます。
Zip
ZipArchive::ER_TRUNCATED_ZIP
定数が追加されました。これは libzip 1.11 で追加されました。