Главная

Обзор последней версии PHP 7.4.

Улучшения, которые были добавлены в новую версию языка.

865 

19+

Да, хотя релиз PHP 7.4 состоялся еще 28 ноября 2019 года, я все же хочу более детально разобрать улучшения, которые были добавлены в этой версии.

PHP — это скриптовый язык, широко используемый в разработке тем и плагинов для WordPress. С помощью последней стабильной версии PHP, вы можете легко улучшить производительность вашего вебсайта. В PHP 7.3, выпущенном в апреле 2019 года, были добавлены улучшения безопасности и производительности. Когда пользователи WordPress перешли с PHP 7.2 на PHP 7.3, время обработки запросов сократилось на 15%.

Новая версия PHP 7.4, которая в настоящее время находится в feature-freeze бета-версии, несет в себе важные улучшения производительности, читабельности и качественности кода. Давайте начнем с более подробного рассмотрения некоторых функций, которые планируют добавить в последнюю версию PHP 7.4.

1. Более удобный код

Главными особенностями PHP 7.3 были улучшения производительности и синтаксиса. PHP 7.4, в свою очередь, идет дальше и делает синтаксис еще более удобным, читабельным и поддерживаемым (maintainable), что в конечном счете превращает PHP в более быстрого и надежного. Вот некоторые RFC (Request for Comments), что планируются в PHP 7.4, и которые сделают PHP более приятным:

Arrow функции

Разработчики PHP уже давно просили arrow функции, которые похожи на функции из Javascript. Они проще в использовании. В свою очередь, функции массива(array functions) в PHP более известны как короткие замыкания(short closures), немного отличаются от arrow функций.

В PHP 7.4 появляется ключевое слово(keyword) fn (оно теперь является зарезервированным). Короткие замыкания могут содержать только выражение и не иметь return. Они не так сильны, как их «коллеги» из Javascript, но они предлагают быстрое решение для некоторых проблем.
В следующем фрагменте кода показаны два разных способа создания массива электронных писем пользователей из коллекции пользовательских объектов:

1.2 Типизированные свойства

Впервые хинтинг типов был введен в версии PHP 5.0 и этот функционал продолжает развиваться от версии к версии. В PHP 7.0 были введены декларации возвращаемых типов. А PHP 7.4 позволяет разработчикам PHP объявлять типы для свойств класса. Это дает гарантию того, что тип данных, назначенный определенному свойству, всегда является типом данных.
Классы типов (Type Classes) будут работать только в классах, и им также нужен модификатор доступа. Давайте попробуем понять эту концепцию на примере. В примере ниже свойство $id может быть только целым числом, а свойство $title — строкой. Когда вы попытаетесь присвоить этим переменным неправильный тип данных, это приведет к ошибке, если объявлены строгие типы. В противном случае PHP приведёт значение к правильному типу.

1.3 Распаковка внутри массивов

Распаковка аргументов была введена в PHP 5.6, поэтому данный функционал может быть еще незнаком многим разработчикам WordPress. В то же время эта фича принесла неоценимую пользу многим проектам.
В PHP 7.4 разработчики получают возможность распаковывать массив в другом массиве. Это работает быстрее, чем array_merge() из-за оператора распространения (….), который скорее является языковой конструкцией, а не функцией.
Рассмотрим следующий пример вставки массива, состоящего из двух цветов, в один большой массив цветов:

1.4 Оператор присваивания нулевого слияния

Оператор присваивания нулевого слияния, который фактически является сокращением операций объединения нулей, помогает устранить избыточность кода для некоторых операторов. Это сокращенный способ объединения проверки isset() с тернарным оператором.

В следующем примере показано, как проверить переменную $productid. Если он установлен, ничего не происходит. В противном случае ему присваивается значение справа. На картинке ниже вы можете увидеть эволюцию кода в разных версиях PHP. Код в PHP 7.4 писать намного проще:

1.5 Поддержка слабых ссылок

Слабые ссылки(Weak References) позволяют программистам PHP сохранять ссылку на объект, дабы предотвратить уничтожение динамического объекта. Это дает разработчикам возможность создавать структуры, подобные кешу. Прямая поддержка слабых ссылок будет введена в PHP 7.4.

2. Депрекации

Депрекации — это функционал, который устарел либо не рекомендуется к использованию.

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

2.2 Использование array_key_exists() для объектов

PHP программистам настоятельно не рекомендуется использовать array_key_exists для объектов, поскольку объекты не являются массивами. Вместо этого стоит использовать property_exists() или isset().

2.3 Обращение к элементам массива с помощью фигурных скобок

Использование фигурных скобок для доступа к элементам массива или строки — это плохая практика, которая очень редко используется. Короче, просто используете квадратные скобки [] вместо фигурных {}.

2.4 Короткие открывающиеся теги(open tags)

Существует много разных способов обозначения начала PHP кода. В их числе и открывающиеся теги <?php … ?>. Большинство этих открывающих тегов были удалены в PHP 7.0, однако некоторые из них все же остались.
Ниже приведен фрагмент кода, который будет работать с PHP short_open_tags:

3. Повышение производительности

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

Opcache работает, используя коды операций(opcodes). Предварительная загрузка работает путем компиляции исходных файлов в коды операций(opcodes) и сохранения скомпилированного кода в памяти.
В таком случае код работает намного быстрее, чем альтернативный: файлы загружаются и связываются при каждом запросе. Такой подход значительно увеличивает производительность и, следовательно, дает веские основания для перехода на PHP 7.4.

4. Ковариантные возвраты и контравариантные параметры

В настоящее время PHP имеет в основном инвариантные параметры и возвращаемые типы, за меньшим количеством исключений. В PHP 7.4 хотят разрешить ковариацию и контравариантность для типов параметров и возвращаемых типов.
Типы параметров:
1. Invariant: если тип супертипа ограничивает тип подтипа.
2. Covariant: если порядок типов сохранен (типы упорядочены от более специфичных к более общим)
3. Contravariant: он меняет порядок (типы упорядочены от более общих к более конкретным)
Ниже приведены примеры, которые четко объясняют ковариантный и контравариантный тип возврата:

Вот пример контравариантного типа возврата:

Заключение

В целом нельзя сказать, что обновление PHP 7.4 особо масштабное. Уже ходят слухи о PHP 8.0 и многие говорят, что это обновление будет действительно большим и интересным.

Спасибо!

19+