В декабре прошлого года для разработчиков стала доступна новая версия PHP. Это минорное изменение, поэтому больших изменений ждать не стоит. В подобных случаях скорее идёт плановая доработка с уже имеющимся материалом.
Релиз PHP получил индекс 7.3. И изменений по сравнению с 7.2 не много. Однако следует рассмотреть все из них для того, чтобы в будущем не сталкиваться с проблемой ошибки или предупреждения компилятора в коде, который ранее отлично работал.
Все изменения можно выделить в несколько частей:
- Устаревшие и исключённые из поставки языка.
- Добавленные функции.
- Изменения в синтаксисе функций.
1. Устаревшие и исключённые из поставки языка.
Среди выведенный из обращения функций выделяется в первую очередь image2wbmp(). Она использовалась для вывода изображения в формате WBMP. Разработчики языка убрали функцию в виду того, что по сравнению с imagewbmp() (функция осуществляет вывод изображения как в браузер так и в файл) она куда реже использовалась самими программистами (в среднем примерно в 8 раз). И теперь предлагается использовать именно imagewbmp(). На неё стоит заменить во всех исходниках прежнюю image2wbmp(), иначе хостинг с поддержкой PHP 7.3 не пропустит фрагмент кода, выдавая ошибку.
В PHP 7.3 удалены и потому будут выводиться в качестве ошибки такие флаги, как FILTER_FLAG_SCHEME_REQUIRED и FILTER_FLAG_HOST_REQUIRED. Ранее они могли использоваться при употреблении функции filter_var($var, FILTER_VALIDATE_URL). С помощью флагов производилось обеспечение строгой проверки URL-адреса. Теперь в кодинге требуется произвести удаление всех подобных упоминаний.
Также выводятся из обращения все регистро-независимые константы, которые объявлялись функцией define(). Это производилось в виде передачи третьим параметром функции "true":
define('First', 'Hello!', true);
Теперь будет появляться сообщение об устаревании подобного подхода. Также будет появляться сообщение в том случае, если задан неправильный регистр в записи (например, First и FIRST).
2. Добавленные функции.
После того, как в версии 7.2 было много удалено устаревших функций, а также тех, которые постоянно могли привести к ошибке, возникла необходимость появления новых с доработкой. В частности, имелась потребность проверки переменной на countable-принадлежность перед тем, как вызывать функцию count(), поскольку если функция не-countable, то появлялось предупреждение. Теперь такой функцией стала is_countable(), которая проверяет переменную на возможность использования перед count().
Также были добавлены очень полезные в работе с массивами функции array_key_first() и array_key_last(). Они помогают получить первый ключ любого массива и последний. Соответственно, благодаря им можно не использовать цикличность для получения последнего ключа. При этом не требуется изменять указатель или выяснять размерность массива (в том случае, если заранее не известно, сколько будет ключей в нём).
Впрочем, совсем не обязательно изменять все исходники. Старые будут тоже работать. А изменения можно вносить уже по мере работы.
3. Изменения в синтаксисе функций.
В PHP 7.3 произошло существенное смягчение требований к синтаксису Heredoc и Nowdoc. Ранее требовалось указывать закрывающийся идентификатор первым в новой строке. При этом не нужно было устанавливать никакие другие символы в строке, кроме ";". Как пример:
$first = <<<IDENTIFIER
Hello, world!
"first" bar;
IDENTIFIER
Теперь подобное требование уходит в прошлое. В частности, полностью изменения можно вывести следующим списком:
* идентификатор, который закрывает выражение, теперь не обязательно должен быть первым, он может иметь отступ пробелами или табами;
* отступы они не должны быть смешанными - или только отступы, или только табы, поскольку перед идентификатором удаляются они все в любой строке heredoc/nowdoc выражения;
* выражения после закрывающего индентификатора в том числе могут работать без ошибок.
Главное в этом случае не перепутать идентификаторы и отличать их (например IDENTIF1 и IDENTIF_1 - разные идентификаторы и не будут приниматься за окончание литерала).
Помимо этого в синтаксисе теперь допустимы запятые в конце вызовов функций, они будут игнорироваться (к примеру при записи first('one', 'two',);), хотя ранее появлялась бы ошибка.
В синтаксисе появилась и дополнительная возможность указывать ссылки в функции list(). Теперь быстрое присвоение значений любой переменной, которая есть в массиве, может выглядеть следующим образом: list($a, &$b) = $arr;
4. Миграция с PCRE на PCRE2.
Для работы с регулярными выражениями в PHP используется Perl Compatible Regular Expressions (PCRE). Начиная с версии PHP 7.3 совершена миграция с достаточно старой PCRE на PCRE2. Во время тестирования новая библиотека показала 30% прирост производительности. Достигается это за счет более строгих требований к синтаксису. Например работавшее ранее выражение preg_match('/[\w-.]+/', ''); в PCRE2 выкинет ошибку Warning: preg_match(): Compilation failed: invalid range in character class at offset 3. Поскольку правильное оформление этого регулярного выражения следующее: preg_match('/[\w\-.]+/', '');
Поэтому перед переходом на новую версию PHP 7.3 стоит протестировать работу своего приложения.
Кстати наш виртуальный хостинг поддерживает PHP 7.3.
Дата: 05.03.2019 Автор: Евгений
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus