• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

 

В декабре прошлого года для разработчиков стала доступна новая версия PHP. Это минорное изменение, поэтому больших изменений ждать не стоит. В подобных случаях скорее идёт плановая доработка с уже имеющимся материалом.

Релиз PHP получил индекс 7.3. И изменений по сравнению с 7.2 не много. Однако следует рассмотреть все из них для того, чтобы в будущем не сталкиваться с проблемой ошибки или предупреждения компилятора в коде, который ранее отлично работал.

Все изменения можно выделить в несколько частей:

  1. Устаревшие и исключённые из поставки языка.
  2. Добавленные функции.
  3. Изменения в синтаксисе функций.

 

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
Спасибо, что выбираете FREEhost.UA