Был введен новый тип, 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 теперь стала основным модулем в PHP (как модуль sodium).
Смотрите раздел Sodium для получения полной информации.
Был добавлен алгоритм Argon2 в API хеширования пароля, где доступны следующие константы:
PASSWORD_ARGON2I
PASSWORD_ARGON2_DEFAULT_MEMORY_COST
PASSWORD_ARGON2_DEFAULT_TIME_COST
PASSWORD_ARGON2_DEFAULT_THREADS
Тип строки 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);
Метод PDOStatement::debugDumpParams() был обновлён, чтобы включить SQL до отправки в БД, где будет показан полный необработанный запрос (включая заменённые параметры с их связанными значениями). Это было добавлено для помощи в отладке эмуляции подготавливаемых запросов (и поэтому это будет доступно только при включенной эмуляции подготавливаемых запросов).
Была добавлена поддержка EXOP в модуль LDAP. Стали доступны следующие функции и константы:
LDAP_EXOP_START_TLS
LDAP_EXOP_MODIFY_PASSWD
LDAP_EXOP_REFRESH
LDAP_EXOP_WHO_AM_I
LDAP_EXOP_TURN
Модуль сокетов теперь имеет возможность искать адресную информацию, а также подключаться к ней, связываться с ней и объяснять её. Для этого были добавлены следующие четыре функции:
Типы параметров из переопределённых методов и реализаций интерфейсов теперь могут быть опущены. Это всё ещё соответствует 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.
Функции pack() и unpack() теперь поддерживают типы float и double как в прямом, так и в обратном порядке байт.
Модуль EXIF обновлен для поддержки большего числа форматов. Это означает, что специфичные теги правильно обрабатываются при разборе изображений функцией exif_read_data(). Новые поддерживаемые форматы:
Функции exif_read_data() и exif_thumbnail() теперь принимают потоки в качестве своих первых аргументов.
Теперь SQLite3::openBlob() умеет открывать поля типа BLOB для записи. Раньше для таких полей было доступно только чтение.
Добавлена поддержка обратных вызовов Oracle Database Transparent Application Failover (TAF). TAF позволяет приложеням PHP OCI8 автоматически переподключаться к предварительно сконфигурированной базе данных при нарушении соединения. Новая поддержка обратного вызова TAF позволяет приложениям отслеживать и контролировать переподключение во время восстановления.
Добавлена поддержка чтения и записи зашифрованных архивов (требуется libzip 1.2.0).
Класс ZipArchive теперь реализует интерфейс Countable.
Поток zip:// теперь принимает контекстную опцию 'password'.