Релиз языка программирования 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     }  
  • Вывод предупреждения при попытках использования функции 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 (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 переведён на использованием объектов вместо ресурсов в качестве основной структуры для представления внутренних данных;
  • В функциях pack () и unpack () добавлена поддержка типов float и double с порядком байтов как от младшего к старшему (little-endian), так и от старшего к младшему (big-endian).

© OpenNet