Релиз языка программирования 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.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.