Релиз PHP 7.4 намечен на 28 ноября 2019 года. WordPress 5.3 также будет включать несколько коммитов, которые устарели.
Маловероятно, что большинство разработчиков плагинов и тем для WordPress смогут использовать новые функции PHP 7.4 какое-то время, за исключением случаев, когда они работают над настройками, где они имеют некоторый контроль над средой. Учитывая нежелание WordPress повысить минимальную версию PHP до последних поддерживаемых версий, могут пройти годы, прежде чем будет безопасно использовать новые функции. Однако разработчики должны убедиться, что их плагины и темы совместимы с 7.4. Это также хорошая практика, чтобы идти в ногу с текущими функциями.
WordPress 5.2 увеличил минимальные требования к PHP 5.6 с рекомендацией PHP 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 являются единственными версиями, получающими активную поддержку. PHP прекратит поддержку безопасности для версии 7.1 с 1 декабря.
Новые особенности
PHP 7.4 включает в себя ряд новых функций, которые облегчат написание кода. Ниже приведен небольшой обзор некоторых функций, которые, вероятно, будут полезны для плагинов WordPress и авторов тем.
Типизированные Свойства
PHP впервые ввел type hinting в 5.0 и продолжил улучшать эту функцию. В PHP 7.0 введены декларации возвращаемых типов. PHP 7.4 поднимает его на ступеньку выше и позволяет разработчикам объявлять типы для свойств класса. Это позволяет разработчикам убедиться, что тип данных, назначенный определенному свойству, всегда соответствует этому типу данных.
В следующем примере $id
свойству может быть назначено только целое число, а $title
свойству — строка. Попытка назначить неправильный тип данных приведет к фатальной ошибке, если объявлены строгие типы. В противном случае PHP приведёт значение к правильному типу.
class Event {
public int $id;
public string $title;
}
Стрелочные функции
Многие разработчики требовали использования стрелочных функций, похожих на JavaScript. Они довольно приятны в использовании. Однако стрелочные функции PHP, также называемые «короткими замыканиями», немного отличаются. PHP 7.4 вводит ключевое слово fn
(теперь зарезервированное ключевое слово). Короткие замыкания могут содержать только одно выражение и не иметь return
ключевого слова. Они не так мощны, как их братья по JavaScript, но они предлагают быстрое решение для некоторых сценариев.
Например, в следующем фрагменте кода показаны два разных способа создания массива электронных писем пользователей из коллекции пользовательских объектов.
// Old way, but still acceptable.
$value = array_map( function( $user ) {
return $user->user_email;
}, $users );
// New way.
$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' ];
Оператор присваивания нулевого слияния
Нулевой объединяющий оператор присваивания является сокращенным способом объединения isset()
проверки с троичным оператором.
В следующем примере показано, как проверить $product['id']
переменную. Если он установлен, ничего не делать. Иначе, присвойте ему значение справа. Вы можете увидеть эволюцию кода между версиями PHP. Гораздо проще написать в 7.4.
// Pre-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 устарели вложенные троичные операторы без них.
// Not OK (deprecated).
$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()
.
// Not OK (deprecated).
if ( array_key_exists( $property, $object ) ) {}
// OK.
if ( property_exists( $object, $property ) ) {}
// OK.
if ( isset( $object->$property ) ) {}
Доступ к смещению массива и строки с помощью фигурных скобок
Использование фигурных скобок для доступа к массиву и смещению строк — большая редкость. Убедитесь, что вы используете квадратные скобки, например []
вместо фигурных скобок {}
.
// Not OK (deprecated).
$value = $a{ $key };
// OK.
$value = $a[ $key ];
Интересная статья