dr.Brain

doctor Brain

мир глазами веб-разработчика

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

возможности PHP 8, которые были бы хороши и в современном JavaScript

dr.Brain

время чтения 3 мин.

Photo by Cristina Anastase Maragos on Unsplash

Я понимаю, что большая часть представителей сообщества программистов все еще придерживается негативного отношения к 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”.

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.