Релиз языка программирования PHP 7.2.
После года разработки официально представлен релиз языка программирования PHP 7.2. Новая ветка включает порцию новых возможностей, в том числе ряд изменений, нарушающих совместимость.
Ключевые улучшения в PHP 7.2:
Новый тип object, при помощи которого можно передавать объекты в качестве параметров и возвращаемых значений функций, а также проводить проверку соответствия типов;
function test(object $obj) : object
{
return new SplQueue();
}
test(new StdClass());
Возможность переопределения абстрактных методов, когда один абстрактный класс наследует другой абстрактный класс.
abstract class A
{
abstract function test(string $s);
}
abstract class B extends A
{
abstract function test($s) : int;
}
Возможность явно не указывать типы параметров в переопределяемых методах.
interface A
{
public function Test(array $input);
}
class B implements A
{
public function Test($input){} // пропущено указание типа для $input
}
Вывод предупреждения E_WARNING при попытках использования функции count() для неисчисляемых скаляров или объектов, не поддерживающих интерфейс Countable (ранее вызов count() для них всегда выдавал 1, что способствовало появлению скрытых ошибок).
Интеграция в основной состав криптографической библиотеки Libsodium. По сравнению с OpenSSL, Libsodium предоставляют существенно более простой API, совместимый с библиотекой NaCl, а также применяет по умолчанию безопасные методы шифрования и хэширования. Функции Libsodium будут доступны разработчикам на языке PHP с префиксом "sodium_*", в отличие от ранее применяемого в расширении pecl/libsodium префикса "Sodium*".
Благодаря Libsodium разработчики на PHP получили возможность использования современных криптографических средств без необходимости установки дополнений, что позволит реализовать в web-приложениях более надёжные криптографические методы, даже в условиях использования хостинга, не допускающего установки своих дополнений. В том числе в базовой поставке доступны цифровые подписи Ed25519, обмен ключами ECDH+Curve25519, шифрование ChaCha20-Poly1305 и AES-256-GCM.
В число поддерживаемых методов хэширования паролей добавлен алгоритм Argon2, победитель конкурса Password Hashing Competition;
Удалена поддержка дополнения Mcrypt из-за прекращения развития библиотеки libmcrypt и накопления большого числа неисправленных проблем;
Проведена работа по приведению в порядок констант для TLS (tls:// и STREAM_CRYPTO_METHOD_TLS_* = TLSv1.0 + TLSv1.1 + TLSv1.2), значения которых теперь нацелены на обеспечения лучшей безопасности. Раньше константы были настроены для обеспечения максимальной обратной совместимости и допускали применение устаревших и ненадёжных методов шифрования.
Поддержка загрузки дополнений по их имени, без явного указания расширения файла (.so или .dll) в php.ini или при вызове функции dl();
Возможность оставлять запятую в конце сгруппированного списка пространств имён в директиве use:
use Foo\Bar\{
Foo,
Bar,
Baz,
};
Строковый тип для PDO (PHP Data Objects) расширен возможностью использования символов национальных алфавитов при эмуляции предварительно формируемых запросов (prepared statement). Для совместного использования с константой PDO::PARAM_STR предложены новые парметры PDO::PARAM_STR_NATL, PDO::PARAM_STR_CHAR и PDO::ATTR_DEFAULT_STR_PARAM.
$db->quote('