クロージャの名前が調整され、親関数の名前と 定義の行番号を含むようになりました。これにより、 スタックトレース内などでの識別が容易になります。
デストラクタ実行中にファイバーを切り替えられるようになりました。 以前はガベージコレクションとの競合のためブロックされていました。
デストラクタは別のファイバー内で実行される場合があります。
ガベージコレクションがファイバー内でトリガーされると、 GC によって呼び出されるデストラクタは 別のファイバー(gc_destructor_fiber)内で実行されます。 このファイバーが中断された場合、残りのデストラクタを実行するために 新しいファイバーが作成されます。 以前の gc_destructor_fiber は GC によって参照されなくなり、 他に参照されていなければ回収される可能性があります。 デストラクタが中断されたオブジェクトは、 デストラクタが戻るか Fiber が回収されるまで回収されません。
ob_start() の flags
パラメータに渡された
出力ハンドラのステータスフラグがクリアされるようになりました。
output_add_rewrite_var() は、
リライトされるホストを選択するために
url_rewriter.hosts
を使用するようになりました。
以前は
session.trans_sid_hosts
を使用していました。
EOLを迎えた Apache 2.0 および 2.2 のサポートが削除されました。 最小必要 Apache バージョンは 2.4 になりました。
組み込みサーバーは、指定されたファイルが見つからない場合、 親ディレクトリをたどってインデックスファイルを再帰的に探します。 このプロセスは、パスがファイルを指しているように見える場合 (最後のパスコンポーネントにピリオドが含まれる場合)はスキップされていました。 その場合、404 エラーが返されていました。 この動作は、すべての場合にインデックスファイルを探すように変更されました。
本文なしでヘッダをフラッシュできるようになりました。
ステータスページにメモリの最大使用量を表示するフィールドが追加されました。
Solaris/Illumos 用の /dev/poll events.mechanism
設定は廃止されました。
trigger_error() および user_error() は、戻り値の型が bool ではなく true になりました。
DOMDocument::registerNodeClass()
は、戻り値の型が bool ではなく true になりました。
実際には常に true
を返すことしかできませんでした。
hash_update()
は、戻り値の型が bool ではなく true になりました。
実際には常に true
を返すことしかできませんでした。
NumberFormatter::ROUND_TOWARD_ZERO
および
NumberFormatter::ROUND_AWAY_FROM_ZERO
が、新しい PHP_ROUND_*
モードと一致するように、
NumberFormatter::ROUND_DOWN
および
NumberFormatter::ROUND_UP
のエイリアスとして追加されました。
ResourceBundle::get()
は、戻り値の型が ResourceBundle|array|string|int|null
になりました。
idn_to_ascii() および idn_to_utf8()
関数は、domain
名が空または長すぎる場合、
ValueError をスローするようになりました。
idn_to_ascii() および idn_to_utf8()
関数は、variant
パラメータが
INTL_IDNA_VARIANT_UTS46
でない場合、
ValueError をスローするようになりました。
libxml_set_streams_context() は、 非ストリームコンテキストリソースが関数に渡された場合、 ストリームコンテキストが使用されるときではなく、 直ちに TypeError をスローするようになりました。
mb_strcut() の動作は、 無効な UTF-8 および UTF-16 文字列に対してより一貫性のあるものになりました。 有効な UTF-8 および UTF-16 文字列に対する動作の変更はありません。
odbc_fetch_object()、
odbc_fetch_array()、および
odbc_fetch_into() の
row
は、デフォルト値が null
になり、
odbc_fetch_row() と一致するようになりました。
以前は、それぞれデフォルト値が
-1
、
-1
、
0
でした。
openssl_csr_new() の
extra_attributes
は、
CSR 属性を設定します。
以前はサブジェクト DN が誤って設定されていました。
openssl_csr_new() の
dn
は、
単一のエントリに対して値の array を設定できるようになりました。
openssl_csr_sign() に新たに
serial_hex
が追加され、
16 進形式でシリアル番号を設定できるようになりました。
openssl_x509_parse() で ASN.1 UTCTime を解析する際、
OpenSSL バージョン 3.2 未満では秒が省略されていると失敗します
(そのようなフィールドでは -1
が返されます)。
OpenSSL バージョン 3.3 以降では、そのような証明書は読み込むことができません。
PDO::getAttribute() で
PDO::ATTR_STRINGIFY_FETCHES
属性の値を取得できるようになりました。
PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE
が追加されました。
サポートされているドライバで PDO::getAttribute() を使用して
クエリ結果のメモリ使用量を取得できるようになりました。
PDO::getAttribute() で
FB_ATTR_DATE_FORMAT
、
FB_ATTR_TIME_FORMAT
、
FB_ATTR_TIMESTAMP_FORMAT
属性の値を取得できるようになりました。
トランザクションの分離レベルとアクセスモードを指定するための新しい属性が追加されました。 この機能のため 5 つの定数が追加されました:
Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL
Pdo\Firebird::READ_COMMITTED
Pdo\Firebird::REPEATABLE_READ
Pdo\Firebird::SERIALIZABLE
Pdo\Firebird::WRITABLE_TRANSACTION
永続的な接続を使用する場合、コンストラクタ内での生存チェックが追加されました。
ビルドされる内容は、
ibase.h 内の
FB_API_VER
の値によって変わります。
この情報を取得するために新しい静的メソッド Pdo\Firebird::getApiVersion()
が追加されました。
この情報は phpinfo() からも参照できます。
5 つの新しいデータ型が利用可能になりました:
INT128
, DEC16
, DEC34
, TIMESTAMP_TZ
, TIME_TZ
これらは Firebird 4.0 以降で利用可能です。
PDO::getAttribute() で
PDO::ATTR_FETCH_TABLE_NAMES
属性の
値を取得できるようになりました。
PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE
によるクエリのメモリ使用量の取得をサポートしました。
カラムが FLOAT4OID
または
FLOAT8OID
型の場合、値は
string ではなく float として返されるようになりました。
pg_select() の conditions
パラメータ
はオプションになり、空の配列を受け入れるようになりました。
Phar::setAlias(), Phar::setDefaultStub() は、戻り値の型が bool ではなく true になりました。
posix_isatty() は、 ファイル記述子/ストリーム引数が無効な場合エラー番号を設定するようになりました。
ReflectionGenerator::getFunction() は、ジェネレータの実行が終了した後でも呼び出すことができるようになりました。
socket_create_listen() の
backlog
パラメータのデフォルト値は
SOMAXCONN
になりました。
以前は 128
でした。
sodium_crypto_aead_aes256gcm_()* 関数は、ARM 暗号化拡張を持つ aarch64 CPU で 利用可能になりました。
SplPriorityQueue::insert(), SplPriorityQueue::recoverFromCorruption(), SplHeap::insert(), SplHeap::recoverFromCorruption() メソッドは、戻り値の型が bool ではなく true になりました。
SplObjectStorage は SeekableIterator を実装するようになりました。
PASSWORD_BCRYPT
ハッシュアルゴリズムの
password_hash() のデフォルトの 'cost'
値が
10
から 12
に引き上げられました。
debug_zval_dump() は、配列がパックされているかどうかを示すようになりました。
long2ip() は、戻り値の型が string|false
ではなく
string になりました。
highlight_string() は、戻り値の型が
string|bool
ではなくstring|true になりました。
print_r() は、戻り値の型が
string|bool
ではなく string|true になりました。
round() 関数の
mode
パラメータは、
RoundingMode|int
に拡張され、
新たに追加された RoundingMode 列挙型のインスタンスを受け入れます。
round() 関数に 4 つの新しいモードが追加されました: RoundingMode::PositiveInfinity, RoundingMode::NegativeInfinity, RoundingMode::TowardsZero, RoundingMode::AwayFromZero
整数への丸めのための内部実装が、正確さの検証と
メンテナンスの容易さのために書き直されました。
その結果、いくつかの丸め処理のバグが修正されました。
例えば、以前は 0.49999999999999994
を最も近い整数に丸めると、
正しい結果の 0.0
ではなく
1.0
になっていました。
他の入力も影響を受け、以前の PHP バージョンと比較して
異なる出力になる場合があります。
round() 関数の「事前丸め」によるバグが修正されました。
以前は、「事前丸め」により 0.285
(実際には 0.28499999999999998
)のような値を
10 進数として、0.29
に丸めていました。
しかし、「事前丸め」は特定の数値を誤って丸めるため、
この修正では「事前丸め」を削除し、値同士の比較方法を変更することで、
値が 10 進数として正しく丸められるようにしました。
round() が処理できる最大精度が
1桁増えました。
例えば、round(4503599627370495.5)
は以前は
4503599627370495.5
を返していましたが、
現在は 4503599627370496
を返します。
最小必要 libcurl バージョンは 7.61.0 になりました。
CURLOPT_DNS_USE_GLOBAL_CACHE
オプションは
もはや効果がなく、通知なく無視されます。
この基本機能は libcurl 7.11.1 で非推奨となり、
libcurl 7.62.0 で削除されました。
GMP オブジェクトを bool に
キャストできるようになりました。以前は E_RECOVERABLE_ERROR
が発生していました。
キャストの動作はオーバーロードされ、値が 0
を表す
GMP オブジェクトは false
にキャストされます。
最小必要 libxml2 バージョンは 2.9.4 になりました。
Intl クラスの動作が統一され、 初期化されていないオブジェクトを使用しようとした場合やクローンに失敗した場合に、 Error 例外をスローするようになりました。
Unicode データテーブルが Unicode 16.0 に更新されました。
MySQL 9 の新しい VECTOR データ型のサポート。
最小必要 OpenSSL バージョンは 1.1.1 になりました。
最小必要 libpq バージョンは 10.0 になりました。
最小必要 libpq バージョンは 10.0 になりました。
SplFixedArray での範囲外アクセスは、 RuntimeException ではなく OutOfBoundsException 型の例外をスローするようになりました。 OutOfBoundsException は RuntimeException の子クラスであるため、 これらの例外をキャッチしようとする際の動作に変更はありません。
型付きプロパティ XSLTProcessor::$cloneDocument および XSLTProcessor::$doXInclude が定義されました。
最小必要 zlib バージョンは 1.2.11 になりました。
ZTS ビルドにおける高負荷の並行処理環境下で、 浮動小数点数の解析とフォーマットのパフォーマンスが向上しました。 これは printf() 系の関数や json_encode()、serialize() などのシリアライズ関数に影響します。
%s
と %d
指定子のみを使用する
sprintf() は、同等の文字列補間にコンパイルされ、
関数呼び出しのオーバーヘッドとフォーマット文字列の
繰り返し解析を回避します。
数値の変換と演算のパフォーマンスが向上しました。
DOMNode::C14N() のパフォーマンスが、 xpath クエリなしの場合に大幅に向上しました。 これは数万ノードのドキュメントで簡単に 2 桁の 時間改善をもたらします。
XML シリアライズのパフォーマンスが向上し、メモリ消費が削減されました。
ノードクラスのメモリ使用量が削減されました。
大きなアップロードで FTP アップロードのパフォーマンスが 最大 10 倍向上しました。
SHA-256 の SSE2 および SHA-NI 実装が追加されました。 これにより、サポートされている CPU でのパフォーマンスが SSE2 で最大 1.3 倍、 SHA-NIで 3から 5 倍向上します。 この最適化は Colin Percival / Tarsnap の功績です。
mb_strcut() は UTF-8 および UTF-16 文字列で大幅に高速になりました。
mbstring のエンコーディング名の検索が大幅に高速になりました。
SJIS-win から Unicode への変換のパフォーマンスが大幅に向上しました。
MySQLnd のクオートのパフォーマンスが向上しました。
名前付きキャプチャグループのパフォーマンスが向上しました。
Random\Randomizer のパフォーマンスが向上しました。 特に Random\Randomizer::getBytes() と Random\Randomizer::getBytesFromString() メソッドで顕著です。
XML シリアライズのパフォーマンスが向上し、メモリ消費が削減されました。
strspn() および strcspn() の パフォーマンスが大幅に向上しました。 二乗時間ではなく、線形時間で実行されるようになりました。
strpbrk() のパフォーマンスが向上しました。
get_browser() は大幅に高速になり、 いくつかのテストケースで最大 1.5 倍から 2.5 倍の速度向上を実現しました。