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

Комментарии[править]

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