Релиз языка программирования PHP 7.2

30 ноября 2017 года

После года разработки официально представлен релиз языка программирования 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('über', PDO::PARAM_STR | PDO::PARAM_STR_NATL);

  • Реализованы дополнительные средства отладки при эмуляции предварительно формируемых запросов (prepared statement): через метод

PDOStatement::debugDumpParams() теперь можно получить сведения об отправленном в СУБД SQL-запросе, после подстановки заменяемых значений;

  • В дополнение для взаимодействие с LDAP добавлена поддержка расширенных операций (EXOP), для работы с которыми предлагаются новые функции и константы:

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;

  • В дополнение Sockets добавлены функции для получения информации об IP-адресе или Unix-сокете: socket_addrinfo_lookup(), socket_addrinfo_connect(), socket_addrinfo_bind(), socket_addrinfo_explain();
  • Расширение возможностей дополнения EXIF, в котором добавлена поддержка дополнительных форматов тегов, в том числе поддержка обработки специфичных тегов Samsung, DJI, Panasonic, Sony, Pentax, Minolta, Sigma/Foveon,

AGFA, Kyocera, Ricoh и Epson;

  • HashContext (ext/hash) переведён на использованием объектов вместо ресурсов в качестве основной структуры для представления внутренних данных (для проверки вместо is_resource()

теперь нужно вызывать is_object());

  • В дополнение SQLite3 добавлена поддержка записи блобов (SQLite3::openBlob() теперь может открывать поля BLOB в режиме записи);
  • В дополнение ZIP добавлена поддержка чтения и записи зашифрованных архивов;
  • В функциях pack() и unpack() добавлена поддержка типов float и double с порядком байтов как от младшего к старшему (little-endian), так и от старшего к младшему (big-endian);
  • Изменена обработка цифровых ключей при преобразовании массивов в объекты и объектов в массивы. Например, появилась возможность доступа к ключам в цифровом и строковом виде, присутствовавшим в массиве, преобразованном в объект и наоборот:

$arr = [0 = 1];
$obj = (object)$arr; // преобразуем массив в объект
var_dump(
$obj,
$obj-{'0'}, // теперь доступен
$obj-{0} // теперь доступен
);

  • Запрещено использования слова object в качестве имён классов, интерфейсов и типажей;
  • Минимальные требования к версии Windows подняты до Windows 7 и Windows Server 2008 R2;
  • Прекращена поддержка платформы NetWare;
  • Прекращена поддержка директивы конфигурации sql.safe_mode.

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Релиз языка программирования PHP 7.2», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.