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

Выход 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

Понравилась статья? Поделиться с друзьями:
Комментарии: 10
  1. Артем

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

    1. Дмитрий (автор)

      :D Без комментариев

    2. mihdan

      35% сайтов мира построены на WP, как вы считаете, это топ или Битрикс, Джумла, Друпал лучше?

  2. Серж

    @Артем.

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

    1. Igor

      А ему всё равно, где ссылку на свой гс оставить

      1. Дмитрий (автор)

        Ссылку убрал)

        1. cyber

          ага и версия wp старая тоже 4.9.13

  3. Евгений

    У меня все сайты стояли на 5.6 – попытался обновить некоторые из них на 7.2 (хостер рекомендовал выше не выбирать версию). Сайт (в подписи) сразу завалило ошибками, хотя у меня тема полностью чистая, с нее весь мусор и лишние функции выпилены. По остальным ошибки даже лечить не стал – сразу вернул ту версию что была и все.

    Это я к чему = прироста производительности или скорости сайта я не заметил. А усилий достаточно много затрачено. Имхо – оно того не стоит.

    1. Дмитрий (автор)

      Далеко не всегда все работает при обновлении версии. Есть старые темы, старые плагины.

  4. Irma

    Очень интересная статья

Добавить комментарий

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