Новые возможности PHP
возможности PHP 8, которые были бы хороши и в современном JavaScript
Я понимаю, что большая часть представителей сообщества программистов все еще придерживается негативного отношения к PHP. Но, по моему мнению, начиная с седьмой версии, с момента релиза которой прошло уже более пяти лет, PHP превратился в гораздо более серьезный, интересный и безопасный язык программирования.
Наряду с just-In-Time компиляцией, несомненно, положительно повлиявшей на производительность приложений, PHP 8 подарил миру разработчиков ряд полезных изменений в синтаксисе языка.
В этой статье я хочу представить три примера использования нового синтаксиса в PHP-коде, полагая, что каждый из представленных случаев был бы полезен, при появлении таких возможностей, и в JavaScript.
Надеюсь, что статья пригодится разработчикам, которые еще не познакомились со всеми возможностями восьмой версии языка программирования PHP.
Содержание
Именованные аргументы
Предположим, что у нас есть функция foo
, которая содержит 6 параметров: от a до f. Все параметры содержат разные значения по умолчанию. И вдруг возникает необходимость вызвать функцию с последним параметром, не соответствующим значению, установленному по умолчанию.
Теперь в PHP 8 для таких случаев есть элегантное решение, Например:
foo(f: false);
В JavaScript решение такой же задачи будет выглядеть более громоздким:
foo('test', 42, true, 'bar', 5.5, false);
К сожалению, в JavaScript возможности передачи значений параметров функции зависит только от позиции параметра в группе передаваемых аргументов. Следует заметить, что именованные параметры в JavaScript можно эмулировать, используя объекты и деструктурирование. Но, возможность воспользоваться встроенной фунцией выгляюит намного привлекательнее.
Выражение match
Новое выражение match
в PHP 8 по своему поведению во многом напоминает оператор switch
. Как и оператор switch
, match
принимает на вход выражение, которое сравнивается с множеством альтернатив, но при этом match
использует в своей работе только строгое соответствие ===
и осуществляет только непосредственное присвоение соответствующего значения переменной:
$fontWeight = match ($weight) {
100 => "Super Thin",
300 => "Thin",
400 => "Normal",
600 => "Bold",
900 => "Heavy"
};
В JavaScript для выполнения сходной задачи придется прибегнуть к возможностям оператора switch
:
const fontWeight = '';
switch (weight) {
case 100:
fontWeight = "Super Thin";
break;
case 300:
fontWeight = "Thin";
break;
case 400:
fontWeight = "Normal";
break;
case 600:
fontWeight = "Bold";
break;
case 900:
fontWeight = "Heavy";
break;
}
В JavaScript можно эмулировать возможности выражения match
с помощью объектов, но для этого потребуется еще одна переменная, что приведет к дополнительному резервированию памяти. Кроме того, такая эмуляция будет работать только в том случае, когда проверяемые значения являются ключами объекта.
Опциональная последовательность
Опциональная последовательность (Optional chaining) является очень элегантным решением при формировании запросов к объектам. Суть данного подхода предельно проста: язык дает возможность обратиться к несуществующей ветви объекта и не получить ошибку, так как цепочка действий будет выполняться только при наличии необходимого свойства:
$country = $session?->user?->getAddress()?->country;
В JavaScript подобную задачу придется выполнять пошагово, каждый раз убеждаясь в наличии необходимого свойства объекта;
const country =
session && session.user && session.user.getAddress() && session.user.getAddress()['country']
? session.user.getAddress()['country']
: null;
Следует заметить, что в соответствующей ветке T39 обсуждения спецификации ECMAScript на стадии 4 уже есть описание синтаксиса опциональных последовательностей в JavaScript.
Выводы
Мы рассмотрели несколько новых полезных возможностей языка PHP 8. Представленные решения, несомненно, могли бы быть неплохим дополнением к синтаксису JavaScript.
Спасибо за внимание.
Перевод статьи Andreas Müller “PHP 8 features I wish also existed in JavaScript”.