PHP 8.4.1 Released!

その他の変更

PHP コア

iterable 型は、コンパイル時に組み込みで array|Traversable のエイリアスと見なされるようになりました。 よって、iterable に関連するエラーメッセージは、 array|Traversable のものが使われるようになります。 型のリフレクションは、単一の iterable (および ?iterable) については iterable という名前が付いた ReflectionNamedType を生成しますが、 union 型の中で iterable を使った場合、 array|Traversable に変換されます。

送信される Cookie の日付フォーマットが 'D, d M Y H:i:s \G\M\T' になりました。 これより前のバージョンでは 'D, d-M-Y H:i:s T' でした。

SAPI モジュールへの変更

CLI

STDOUT, STDERR, STDIN ストリームは、リソースが破棄される時にクローズされなくなりました。 これらのクローズは、ほとんどの場合 CLI が終了する際に行われます。 しかし、fclose() や類似の関数を使うことで、これらのストリームを明示的に閉じることはできます。

変更された関数

PHP コア

バイナリセーフな文字列比較を行う strcmp(), strcasecmp(), strncmp(), strncasecmp(), substr_compare() は、 比較対象の文字列の長さが等しくないときに strlen($string1) - strlen($string2) を返すことが保証されなくなり、 -11 を返すようになりました。 返される具体的な値に依存する代わりに、これらの関数の戻り値は 0 と比較すべきです。

DBA

dba_open()dba_popen() は、以下のシグネチャを強制するようになりました:

dba_open(
    string $path,
    string $mode,
    ?string $handler = null,
    int $permission = 0644,
    int $map_size = 0,
    ?int $flags = null
): resource|false

dba_fetch() のオプションの skip 引数は、 PHP でユーザーが使える関数のセマンティクスに従い、最後に置かれるようになりました。 シグネチャは以下になります:

dba_fetch(string|array $key, resource $handle, int $skip): string|false
オーバーロードされたシグネチャは下記のとおりです:
dba_fetch(string|array $key, int $skip, resource $handle): string|false
上記は、引き続き許可されていますが、新しい標準的なシグネチャを使うことを推奨します。

Random

random_bytes()random_int() は、CSPRNG が失敗した場合に \Random\RandomException をスローするようになりました。 これより前のバージョンでは、\Exception がスローされていました。

Standard PHP Library(SPL)

iterator_to_array()iterator_count()iterator 引数の型が Iterator から iterable に拡張され、 配列を渡せるようになりました。

拡張モジュールへのその他の変更

Date

DatePeriod のプロパティが、適切に宣言されるようになりました。

国際化関数

IntlBreakIterator, IntlRuleBasedBreakIterator, IntlCodePointBreakIterator, IntlPartsIterator, IntlCalendar, Collator, IntlIterator, UConverter, IntlDateFormatter, IntlDatePatternGenerator, MessageFormatter, ResourceBundle, Spoofchecker, IntlTimeZone, Transliterator のインスタンスは、シリアライズできなくなりました。 これより前のバージョンでは、シリアライズはできていましたが、 アンシリアライズした際に役に立たないオブジェクトを生成したり、失敗したりしていました。

MySQLi

libmysql のサポートが削除されました。 よって、libmysql を使って mysqli をビルドすることはもはやできません。 このバージョンからは、 mysqli 拡張モジュールは mysqlnd を使った場合にのみコンパイルできます。 以下に示す、mysqlnd で利用できない、libmysql のすべての機能が削除されました:

OCI8

必須となる Oracle Client library の最低バージョンが、11.2 になりました。

PCRE

パターン文字列中の NUL 文字 (\0) がサポートされるようになりました。

Session

セッションがアクティブだったり、出力が既に送信された後に session.cookie_samesite を変更しようとすると、変更が失敗するとともに、警告が発生するようになりました。 この変更は、他のセッション関連の INI 設定の振る舞いに合わせたものです。

SQLite3

sqlite3.defensive の変更可能範囲が、INI_USER になりました。

標準ライブラリ

getimagesize() は、AVIF 画像の ビット数、チャンネル情報、幅と高さの情報(dimensions) を返すようになりました。 これより前のバージョンでは、幅と高さの情報は 0x0 として報告され、ビット数とチャンネル情報は全く報告されていませんでした。

Tidy

tidy クラスのプロパティが、適切に宣言されるようになりました。 tidyNode のプロパティも、readonly として適切に宣言されるようになりました。

Zip

Zip 拡張モジュールは、1.20.0 にアップデートされました。 以下のメソッドが追加されています:

INI ファイルの扱いの変更

INI ファイルに数値を設定する際、 2進数のプレフィックス (0b/0B) および、8進数のプレフィックス (0o/0O) を指定する機能がサポートされました。 INI ファイルに数値を設定する際に値をゼロ (0) から始めた場合、 引き続き8進数の数値として解釈されます。

設定項目によっては、不正な値をパースした場合に警告が発生するようになりました。 これより前のバージョンでは、静かに無視されていました。 後方互換を保つため、値を解釈する方法は変更されていません。 影響を受ける設定は、以下のとおりです:

add a note

User Contributed Notes

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