その他の変更
SAPI モジュールの変更
Apache2Handler
PHP モジュールの名前が php7_module
から
php_module
に変更されました。
変更された関数
リフレクション
ReflectionClass::getConstants() と
ReflectionClass::getReflectionConstants() の結果は
新しい引数 filter
を経由してフィルタされるように変更されました。
この用途のために、以下の3つの新しい定数が追加されています:
標準ライブラリ
数学関数
abs(),
ceil(),
floor(),
round()
は、
strict_types
ディレクティブ
を適切に尊重するようになりました。
PHP 8.0.0 より前のバージョンでは、
たとえ strict モードであっても、
最初の引数の型を強制的に自動変換していました。
Zip
-
ZipArchive::addGlob() と ZipArchive::addPattern() メソッドは 配列
options
の値に、以下の値を追加で受け入れるようになりました:flags
comp_method
comp_flags
env_method
enc_password
-
ZipArchive::addEmptyDir(), ZipArchive::addFile(), ZipArchive::addFromString() に新しい引数
flags
が追加されました。 これによって、名前のエンコーディング (ZipArchive::FL_ENC_*
) とエントリの置換 (ZipArchive::FL_OVERWRITE
) が管理できるようになります。 -
ZipArchive::extractTo() メソッドは、ファイルの変更時間も復元するようになりました。
拡張モジュールに対するその他の変更
CURL
-
CURL 拡張モジュールは、libcurl 7.29.0 以降が必須になりました。
-
推奨されなくなっていた curl_version() 関数の
version
引数が削除されました。
日付と時刻
DatePeriod クラスが、 (Traversable ではなく) IteratorAggregate を実装しました。
DOM
DOMNamedNodeMap と DOMNodeList が、 (Traversable ではなく) IteratorAggregate を実装しました。
国際化関数
IntlBreakIterator と ResourceBundle が、 (Traversable ではなく) IteratorAggregate を実装しました。
Enchant
enchant 拡張モジュールは、利用可能な場合は、デフォルトで libenchant-2 を使うようになりました。 libenchant バージョン1 もまだサポートしていますが、推奨されませんし、将来削除される可能性があります。
GD
-
imagepolygon(), imageopenpolygon(), imagefilledpolygon() 関数の
num_points
引数はオプションになりました。 つまり、これらの関数は3つ、または4つの引数で呼び出すことが出来るということです。 この引数が省略された場合、この値はcount($points)/2
で計算されます。 -
現在の補間メソッドを取得するために、imagegetinterpolation() 関数が追加されました。
JSON
JSON 拡張モジュールは無効にできなくなりました。 date 拡張モジュールと同様に、PHP をビルドするために常に必須になっています。
マルチバイト文字列
Unicode データのテーブルが、バージョン 13.0.0 に更新されました。
PDO
PDOStatement は、 (Traversable ではなく) IteratorAggregate を実装しました。
LibXML
libxml の最低バージョンが 2.9.0 になりました。 これにより、外部エンティティの読み込みがデフォルトで無効であることが保証されるようになりました。 よって、XXE攻撃を防ぐために追加の手順を踏む必要はありません。
MySQLi / PDO MySQL
-
mysqlnd を使わない (これはデフォルトであり、推奨されるオプションです) 場合、 サポートされる libmysqlclient の最低バージョンは 5.5 になりました。
-
mysqli_result は、 (Traversable ではなく) IteratorAggregate を実装しました。
PGSQL / PDO PGSQL
PGSQL と PDO PGSQL 拡張モジュールは、libpq 9.1 以降が最低限必要になりました。
Readline
対話的なプロンプトが始まる前に (つまり、 auto_prepend_file を実行中に) readline_completion_function() を呼ぶと、 デフォルトの対話プロンプトの補完関数を上書きするようになりました。 PHP 8.0.0 より前のバージョンでは、 readline_completion_function() 関数は 対話的なプロンプトが始まった後に呼び出したときにだけ動作していました。
SimpleXML
SimpleXMLElement は、 RecursiveIterator を実装し、 SimpleXMLIterator の機能を吸収しました。 SimpleXMLIterator は、 SimpleXMLElement を継承しただけのものです。
INI ファイルの扱いの変更
-
com.dotnet_version は、dotnet オブジェクトで使う、 .NET framework のバージョンを選ぶための新しいINIディレクティブです。
-
zend.exception_string_param_max_len は、文字列化されたスタックトレースの引数中の、 文字列の最大の長さを設定する新しいINIディレクティブです。
EBCDIC
EBCDIC ターゲットはサポートされなくなりました。 しかし、そもそもまだ動いているわけでもなさそうです。
パフォーマンスに関わる変更
-
ジャストインタイム (JIT) コンパイラが opcache 拡張モジュールに追加されました。
-
隙間がない配列で array_slice() 関数を使う場合、 最初のオフセットを探すために配列全体を走査しなくなりました。 これによって、オフセットが巨大、かつサイズが小さい場合に、 関数の実行時間が著しく改善する可能性があります。
-
LC_CTYPE
ロケールが"C"
の場合 (これはデフォルトです)、 strtolower() 関数は SIMD 実装を使うようになりました。
User Contributed Notes 1 note
If loading the PHP8 apache module on SuSe Linux, the configuration scripts incorrectly try to load it with automatically generated load statement of:
LoadModule php8_module /usr/lib64/apache2/mod_php8.so
This does not work, the patch below fixes the conf file generator...
--- /usr/share/apache2/get_module_list 2023-01-14 22:41:49.586825349 -0500
+++ /usr/share/apache2/get_module_list 2023-01-14 22:42:02.171600410 -0500
@@ -91,4 +91,8 @@
esac
+ if [ "$module_id" = "php8_module" ]; then
+ module_id="php_module"
+ fi
+
if [[ -f $module_path ]]; then
printf "LoadModule %-30s %s\n" $module_id $module_path >&3