Первый взгляд на PHP 7.4 для WordPress-разработчиков

Дата публикации:Октябрь 7, 2019

Выход PHP 7.4 намечен на 28 ноября 2019 года. Релиз WordPress 5.3 также будет включать в себя несколько коммитов, связанных с тем, что некоторые возможности в PHP 7.4 теперь считаются устаревшими.

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

В WordPress 5.2 были увеличены минимальные требования к PHP до версии 5.6, причем рекомендуется использовать 7.3. Ниже приводится разбивка статистики использования версий PHP по сайтам с WordPress:

  • PHP 7.3 – 9.6%
  • PHP 7.2 – 22.2%
  • PHP 7.1 – 13.5%
  • PHP 7.0 – 14.9%
  • PHP 5.6 – 25.7%

В данный момент только версии PHP 7.2 и 7.3 имеют активную поддержку. С 1 декабря поддержка безопасности для PHP 7.1 будет прекращена.

Новые возможности

В PHP 7.4 появится ряд новых функций, которые облегчат написание кода. Ниже приведен обзор некоторых функций, которые, скорее всего, будут полезны для авторов плагинов и тем WordPress.

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

Контроль типа (тайпхинтинг) был впервые введен в версии 5.0, и с тех пор эта возможность постоянно улучшалась. В PHP 7.0 были введены объявления типов возвращаемых значений. В PHP 7.4 разработчики смогут объявлять типы для свойств классов.

В следующем примере свойству $id может быть присвоено только целочисленное значение, а свойству $title – строковое. Попытка присвоить неправильный тип данных приведет к фатальной ошибке, если объявлена строгая типизация.

class Event {
 
    public int $id;
 
    public string $title;
}

Стрелочные функции

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

В следующем фрагменте кода показано два реальных способа создания массива с пользовательскими email из коллекции пользовательских объектов.

// Старый вариант, все еще применимый.
$value = array_map( function( $user ) {
    return $user->user_email;
}, $users );
 
// Новый вариант.
$value = array_map( fn( $user ) => $user->user_email, $users );

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

Распаковка аргументов была введена в PHP 5.6, потому это все еще может являться незнакомой территорией для многих разработчиков в сообществе WordPress.

В PHP 7.4 распаковку массива можно будет производить прямо внутри массива. Такой вариант должен работать быстрее, чем array_merge(), поскольку оператор распространения (…) является языковой конструкцией, а не функцией.

Рассмотрим пример вставки массива из двух цветов в более крупный массив цветов.

$colors_a = [ 'green', 'blue' ];
 
$colors_b = [ 'red', ...$colors_a, 'yellow', 'purple' ];
 
// [ 'red', 'green', 'blue', 'yellow', 'purple' ];

Оператор null-объединения

Оператор null-объединения – короткий способ объединения проверки isset() с тернарным оператором.

В следующем примере показано, как проверить переменную $product[‘id’]. Если оператор задан, ничего не делается. Иначе ему присваивается значение справа. Вы можете увидеть эволюцию кода в разных версиях PHP. Гораздо проще писать в PHP 7.4:

// До PHP 7.0.
$product['id'] = isset( $product['id'] ) ? $product['id'] : 0;
 
// PHP 7.0.
$product['id'] = $product['id'] ?? 0;
 
// PHP 7.4.
$product['id'] ??= 0;

Возможности, признанные устаревшими

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

Я отобрал несколько функций и возможностей, с которыми я часто сталкивался в коде плагинов и тем за последние несколько лет. Остальные устаревшие функции маловероятны в современном коде.

Вложенные тернарные операторы без круглых скобок

Вложенных тернарных операторов, как правило, лучше избегать при написании кода. За ними тяжело следить, в них часто могут встречаться какие-либо ошибки. Если вам они все же нравятся, то в таком случае используйте круглые скобки. В PHP 7.4 вложенные тернарные операторы без круглых скобок будут признаны устаревшими.

// Уже не OK (устаревший вариант).
$value = $a ? $b : $c ? $d : $e;
 
// OK.
$value = ( $a ? $b : $c ) ? $d : $e;
 
// OK.
$value = $a ? $b : ( $c ? $d : $e );

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

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

// Уже не OK (устаревший вариант).
if ( array_key_exists( $property, $object ) ) {}
 
// OK.
if ( property_exists( $object, $property ) ) {}
 
// OK.
if ( isset( $object->$property ) ) {}

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

Использование фигурных скобок для доступа к элементам массивов и смещениям строк – большая редкость, но я сталкивался с этим несколько раз. Убедитесь в том, что вы используете квадратные скобки, а не фигурные.


// Уже не OK (устаревший вариант).
$value = $a{ $key };
 
// OK.
$value = $a[ $key ];

Источник: wptavern.com

6 комментариев

  1. Артем says:

    Блин, везде где незайду обсудают WP. Я непойму, неужеле это самая топовая cms в мире?

  2. Серж says:

    @Артем.

    Так вы на ВП блоге статью читаете, что удивительного?

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.