PHPerKaigi 2024

その他の変更

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

拡張モジュールに対するその他の変更

CURL

  • CURL 拡張モジュールは、libcurl 7.29.0 以降が必須になりました。

  • 推奨されなくなっていた curl_version() 関数の version 引数が削除されました。

日付と時刻

DatePeriod クラスが、 (Traversable ではなく) IteratorAggregate を実装しました。

DOM

DOMNamedNodeMapDOMNodeList が、 (Traversable ではなく) IteratorAggregate を実装しました。

国際化関数

IntlBreakIteratorResourceBundle が、 (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 実装を使うようになりました。

add a note

User Contributed Notes 1 note

up
0
barry dot nelson at amobiledevice dot com
1 year ago
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
To Top