## Новые возможности

### Новый тип object

Был введён новый тип, object, который может использоваться в передаваемых параметрах (контравариантность) и возвращаемых значениях (ковариантность) для любых объектов.

    <?php

    function test(object $obj) : object
    {
        return new SplQueue();
    }

    test(new stdClass());

### Загрузка модуля по имени

Для подгружаемых модулей больше не требуется указание расширения файла (`.so` для Unix или `.dll` для Windows). Это допускается в файле php.ini, а также в функции dl().

### Разрешено переопределение абстрактных методов

Абстрактные методы теперь можно переопределить, в случаях когда абстрактный класс наследуется от другого абстрактного класса.

    <?php

    abstract class A
    {
        abstract function test(string $s);
    }
    abstract class B extends A
    {
        // переопределён - всё ещё сохраняя контравариантность для параметров и ковариантность для возвращаемых значений
        abstract function test($s) : int;
    }

### Sodium теперь является основным модулем

Современная криптографическая библиотека Sodium теперь стала основным модулем в PHP (как модуль sodium).

Смотрите раздел Sodium для получения полной информации.

### Добавлено хеширование пароля с помощью Argon2

Был добавлен алгоритм Argon2 в API хеширования пароля, где доступны следующие константы:

- `PASSWORD_ARGON2I`
- `PASSWORD_ARGON2_DEFAULT_MEMORY_COST`
- `PASSWORD_ARGON2_DEFAULT_TIME_COST`
- `PASSWORD_ARGON2_DEFAULT_THREADS`

### Расширенные типы строк для PDO

Тип строки PDO был расширен для поддержки национальных наборов символов при эмуляции подготавливаемых запросов. Добавлены новые константы:

- `PDO::PARAM_STR_NATL`
- `PDO::PARAM_STR_CHAR`
- `PDO::ATTR_DEFAULT_STR_PARAM`

Эти константы используется в побитовом `OR` с константой `PDO::PARAM_STR`:

    <?php

    $db->quote('über', PDO::PARAM_STR | PDO::PARAM_STR_NATL);

### Дополнительная отладочная информация при эмуляции подготавливаемых запросов в PDO

Метод PDOStatement::debugDumpParams() был обновлён, чтобы включить SQL до отправки в БД, где будет показан полный необработанный запрос (включая заменённые параметры с их связанными значениями). Это было добавлено для помощи в отладке эмуляции подготавливаемых запросов (и поэтому это будет доступно только при включённой эмуляции подготавливаемых запросов).

### Поддержка расширенных операций в LDAP

Была добавлена поддержка EXOP в модуль LDAP. Стали доступны следующие функции и константы:

- ldap_parse_exop()
- ldap_exop()
- ldap_exop_passwd()
- ldap_exop_whoami()
- `LDAP_EXOP_START_TLS`
- `LDAP_EXOP_MODIFY_PASSWD`
- `LDAP_EXOP_REFRESH`
- `LDAP_EXOP_WHO_AM_I`
- `LDAP_EXOP_TURN`

### Информация об адресе в модуле сокетов

Модуль сокетов теперь имеет возможность искать адресную информацию, а также подключаться к ней, связываться с ней и объяснять её. Для этого были добавлены следующие четыре функции:

- socket_addrinfo_lookup()
- socket_addrinfo_connect()
- socket_addrinfo_bind()
- socket_addrinfo_explain()

### Расширение типа параметра

Типы параметров из переопределённых методов и реализаций интерфейсов теперь могут быть опущены. Это всё ещё соответствует LSP, так как параметры типов контравариантны.

    <?php

    interface A
    {
        public function Test(array $input);
    }

    class B implements A
    {
        public function Test($input){} // тип параметра не указан $input
    }

### Разрешена завершающая запятая для сгруппированных пространств имён

Завершающая запятая теперь может быть добавлена в синтаксис группировки use, появившегося в PHP 7.0.

    <?php

    use Foo\Bar\{
        Foo,
        Bar,
        Baz,
    };

### Поддержка proc_nice() для Windows

Функция proc_nice() теперь поддерживается в Windows.

### Поддержка порядка байт в pack() и unpack()

Функции pack() и unpack() теперь поддерживают типы float и double как в прямом, так и в обратном порядке байт.

### Улучшения в модуле EXIF

Модуль EXIF обновлён для поддержки большего числа форматов. Это означает, что специфичные теги правильно обрабатываются при разборе изображений функцией exif_read_data(). Новые поддерживаемые форматы:

- Samsung
- DJI
- Panasonic
- Sony
- Pentax
- Minolta
- Sigma/Foveon
- AGFA
- Kyocera
- Ricoh
- Epson

Функции exif_read_data() и exif_thumbnail() теперь принимают потоки в качестве своих первых аргументов.

### Новая функциональность в PCRE

- Добавлен модификатор `J` для установки PCRE_DUPNAMES.

### SQLite3 позволяет записывать BLOB

Теперь SQLite3::openBlob() умеет открывать поля типа BLOB для записи. Раньше для таких полей было доступно только чтение.

### Обратные вызовы Oracle OCI8 Transparent Application Failover

Добавлена поддержка обратных вызовов Oracle Database Transparent Application Failover (TAF). TAF позволяет приложениям PHP OCI8 автоматически переподключаться к предварительно сконфигурированной базе данных при нарушении соединения. Новая поддержка обратного вызова TAF позволяет приложениям отслеживать и контролировать переподключение во время восстановления.

### Улучшения в модуле ZIP

Добавлена поддержка чтения и записи зашифрованных архивов (требуется libzip 1.2.0).

Класс ZipArchive теперь реализует интерфейс Countable.

Поток `zip://` теперь принимает контекстную опцию `'password'`.

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