## その他の変更

### SAPI モジュールの変更

#### Apache2Handler

PHP モジュールの名前が `php7_module` から `php_module` に変更されました。

### 変更された関数

#### リフレクション

ReflectionClass::getConstants() と ReflectionClass::getReflectionConstants() の結果は 新しい引数 `filter` を経由してフィルタされるように変更されました。 この用途のために、以下の3つの新しい定数が追加されています:

- `ReflectionClassConstant::IS_PUBLIC`
- `ReflectionClassConstant::IS_PROTECTED`
- `ReflectionClassConstant::IS_PRIVATE`

#### 標準ライブラリ

数学関数 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 実装を使うようになりました。

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open