その他の変更

SAPI モジュールへの変更

CLI

readline 拡張機能 が組み込まれていないのに、 -a オプションを使った場合、 エラーが発生するようになりました。 以前のバージョンでは、 readline が組み込まれていない時に -a オプションを使うと、 php コマンドを引数なしでコールしたのと同じ振る舞いをするのに、 "Interactive mode enabled" というメッセージを追加で出力していました。 この場合のモードは、インタラクティブでは ありませんでした

PHPDBG

phpdbg のリモート関連の機能が削除されました。

変更された関数

PHP コア

foreachvar_dump()serialize()、 オブジェクトの比較時などで用いられるプロパティの順序が変更されました。 プロパティは宣言や継承に応じて、自然順に並ぶようになりました。 親クラスで宣言されたプロパティは、 子クラスのプロパティの前に並びます。

この順序は、 構造体 zend_object 内部のレイアウトと一致しており、 default_properties_table[]properties_info_table[] でも同様の順序が用いられています。 以前のバージョンでは、 プロパティの順序がドキュメント化されておらず、 クラスの継承の実装の詳細に依存していました。

Filter

FILTER_VALIDATE_INT フィルタの FILTER_FLAG_ALLOW_OCTAL フラグは、 8進数のプレフィックス ("0o"/"0O") が先頭についた8進文字列を受け入れるようになりました。

GMP

全ての GMP 関数が、 8進数のプレフィックス ("0o"/"0O") が先頭についた8進文字列を受け入れるようになりました。

PDO ODBC

PDO::getAttribute()PDO::ATTR_SERVER_INFOPDO::ATTR_SERVER_VERSION を指定した場合でも、 値を返すようになりました。 以前のバージョンでは、 PDOException をスローしていました。

リフレクション

ReflectionProperty::setAccessible()ReflectionMethod::setAccessible() は、もはや意味をなさなくなりました。 プロパティとメソッドは、 常にリフレクション経由でアクセス可能と見なされるようになっています。

Standard

syslog() 関数は、バイナリセーフになりました。

拡張機能へのその他の変更

GD

imagewebp() 関数の quality 引数に IMG_WEBP_LOSSLESS を指定することで、 ロスレスエンコードが行えるようになりました。

システムが使っている libgd が WebP のロスレスエンコーディングをサポートしている場合にのみ、 この定数は定義されます。

MySQLi

libmysqlclient とリンクした場合に、 mysqli_stmt::next_result()mysqli::fetch_all() が使えるようになりました。

OpenSSL

  • OpenSSL 拡張機能 は、OpenSSL 1.0.2 以降が必須になりました。

  • OpenSSL 3.0 がサポートされるようになりました。 多くの暗号が(レガシーなプロバイダの一部となっているため) デフォルトで有効ではなくなり、 引数の検証 (たとえば鍵の最小サイズ) が厳しくなっています。

Phar

  • SHA256 が、シグネチャのデフォルトとして使われるようになりました。

  • OpenSSL_SHA256 と OpenSSL_SHA512 シグネチャのサポートが追加されました。

SNMP

  • セキュリティプロトコルのために、 SHA256 と SHA512 のサポートが追加されました。

Standard

configure オプション --with-password-argon2 は、 libargon2 を検知するのに pkg-config を使うようになっています。 そのため、libargon2 のインストール先を指定するには、 PKG_CONFIG_PATH を使うべきです。

INI ファイルの扱いの変更

  • INI ディレクティブ log_errors_max_len は削除されました。 PHP 8.0.0 以降、この設定は意味をなさなくなっていました。

  • クォートされた文字列の先頭にドル記号がある場合、 そのドル記号はエスケープされるようになりました。 つまり、 "\${" は、 ${ という文字列として解釈されます。

  • ダブルクォートで囲まれた文字列中のバックスラッシュは、 エスケープ文字としてより一貫した形で扱われるようになりました。 以前のバージョンでは、 "foo\\" の後に改行文字以外の文字が続いた場合、 文字列の終端とは見なされませんでした。 PHP 8.1.0 以降では、foo\ という文字列として解釈されるようになります。 例外として、"foo\" の後に改行文字が続いた場合は、 foo\ という文字列として解釈されます。 文字列が終端していないとは見なされません。 但し、"C:\foo\" のような、 Windows のファイルパスを使う場合には例外が存在します。

関連キーワード:  変更, 関数, バージョン, 順序, サポート, クラス, 文字, 解釈, 先頭, SHA