## Другие изменения

### Изменения в модулях SAPI

#### Apache2Handler

Модуль PHP был переименован из `php7_module` в `php_module`.

### Изменённые функции

#### Reflection

Результаты ReflectionClass::getConstants() и ReflectionClass::getReflectionConstants() теперь можно фильтровать с помощью нового параметра `filter`. Добавлены три новые константы для работы с ним:

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

#### Стандартные функции

Математические функции abs(), ceil(), floor() и round() теперь правильно учитывают объявление `strict_type`. Ранее они приводили первый аргумент к числовому значению даже в режиме строгой типизации.

#### 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.

- Устаревший параметр `version` функции curl_version() был удалён.

#### Дата и время

DatePeriod теперь реализует IteratorAggregate (вместо Traversable).

#### DOM

DOMNamedNodeMap и DOMNodeList теперь реализуют IteratorAggregate (вместо Traversable).

#### Intl

IntlBreakIterator и ResourceBundle теперь реализуют IteratorAggregate (вместо Traversable).

#### Enchant

Модуль enchant теперь использует libenchant-2 по умолчанию, если возможно. libenchant версии 1 все ещё поддерживается, но устарел и может быть удалён в будущем.

#### GD

- Параметр `num_points` для imagepolygon(), imageopenpolygon() и imagefilledpolygon() теперь является необязательным, то есть эти функции могут быть вызваны с помощью трёх или четырёх параметров. Если параметр опущен, он рассчитывается как `count($points)/2`.

- Добавлена функция imagegetinterpolation() для получения текущего метода интерполяции.

#### JSON

Модуль JSON больше нельзя отключить, теперь он является неотъемлемой частью любой сборки PHP, как и модуль date.

#### MBString

Таблицы данных Unicode обновлены до версии 13.0.0.

#### PDO

PDOStatement теперь реализует IteratorAggregate (вместо Traversable).

#### LibXML

Минимальная необходимая версия libxml - 2.9.0. Это означает, что загрузка внешних объектов по умолчанию теперь отключена и поэтому не требуется дополнительных шагов для защиты от XXE-атак.

#### MySQLi / PDO MySQL

- Если mysqlnd не используется (это вариант по умолчанию и рекомендуется), минимальная поддерживаемая версия libmysqlclient теперь 5.5.

- mysqli_result теперь реализует IteratorAggregate (вместо Traversable).

#### PGSQL / PDO PGSQL

Для модулей PGSQL и PDO PGSQL теперь требуется как минимум libpq 9.1.

#### Readline

Вызов readline_completion_function() перед запуском интерактивной подсказки (например, в auto_prepend_file) теперь отменяет функцию завершения интерактивной подсказки по умолчанию. Ранее readline_completion_function() работала только при вызове после запуска интерактивной подсказки.

#### SimpleXML

SimpleXMLElement теперь реализует RecursiveIterator и включает в себя функционал SimpleXMLIterator. SimpleXMLIterator является пустым расширением SimpleXMLElement.

### Изменения в обработке INI-файлов

- com.dotnet_version - это новая INI-директива для выбора версии платформы .NET, которая будет использоваться для объектов dotnet.

- zend.exception_string_param_max_len - это новая INI-директива для установки максимальной длины строки в аргументе строковой трассировки стека.

### EBCDIC

Цели EBCDIC больше не поддерживаются, хотя маловероятно, что они до сих пор работали.

### Производительность

- Компилятор Just-In-Time (JIT) был добавлен в модуль opcache.

- array_slice() в массиве без расстояний между элементами больше не будет сканировать весь массив, чтобы найти начальное смещение. Это может значительно сократить время выполнения функции с большими смещениями и малой длиной.

- strtolower() теперь использует реализацию SIMD в локали `"C"` `LC_CTYPE` (которая используется по умолчанию).

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