Рубрики
Uncategorized

PHP 7.4 Новая грамматика: Функция стрелки

Автор оригинала: David Wong.

Короткие замыкания, также известные как функции со стрелками, – это короткие функции, написанные на php . Эта функция очень полезна при передаче замыканий функциям, таким как использование array_map Или array_filter Время выполнения функции.

Вот как они выглядят:

// Collection of Post Objects
$posts = [/* … */];

$ids = array_map(fn($post) => $post->id, $posts);

В прошлом вам приходилось писать вот так:

$ids = array_map(function ($post) {
    return $post->id;
}, $posts);

Давайте подытожим, как используются функции короткого замыкания.

  • Доступно в PHP 7.4
  • с fn Начало ключевого слова
  • Может содержать только Одно Выражение, то есть возвращаемые выражения
  • возврат Ключевое слово незначительно
  • Подсказки типа могут быть сделаны как для параметров, так и для типов возвращаемых данных

Более строгое ограничение типа приведенных выше примеров может быть записано:

$ids = array_map(fn(Post $post): int => $post->id, $posts);

Необходимо отметить два момента:

  • Также допускаются операторы расширения
  • Ссылки разрешены, и оба параметра могут использоваться в качестве возвращаемых значений

Если вы хотите вернуть результат по ссылке, вам следует использовать следующую грамматику:

fn&($x) => $x

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

Один ряд

Вы должны понять это правильно: короткие замыкания могут иметь только Одно Выражение. Это означает, что в теле закрытия больше не может быть строк.

Причины заключаются в следующем: Цель коротких замыканий-уменьшить избыточность. Конечно, в любом случае fn Все соотношение функция Короткое. Однако Никита Попов, основатель RFC, утверждает, что если вы имеете дело с функциями многострочных выражений, замыкания менее выгодны.

В конце концов, определение многострочных замыканий избыточно, поэтому ключевых слов нет и нет.( функция и возврат ) Это не будет иметь большого значения.

Согласны вы или нет, зависит от вас. Хотя в моем проекте я могу придумать множество сценариев закрытия одной полосы движения, существует также много случаев закрытия нескольких линий. Лично мне в этих случаях понравятся короткие фразы.

Надеюсь, однако, что в будущем можно будет добавить несколько коротких замыканий, но это также будет отдельный RFC.

Значение внешней области

Еще одной характерной особенностью коротких замыканий и обычных замыканий является то, что короткие замыкания не нужно использовать использовать Доступ по ключевым словам к данным из внешних областей.

$modifier = 5;

array_map(fn($x) => $x * $modifier, $numbers);

Важно отметить, что переменные во внешней области не могут быть изменены. Потому что это относится к передаче значений, а не к передаче ссылок. Это означает, что вы Уверены Измените переменную короткого замыкания $модификатор , но она не будет находиться во внешней области $модификатор Переменные оказывают влияние.

Конечно, есть исключение, то есть $это Ключевое слово, функция которого точно такая же, как у обычных замыканий:

array_map(fn($x) => $x * $this->modifier, $numbers);

Перспективы развития

Многострочные замыкания, о которых я упоминал, все еще являются возможностью для дальнейшего развития. Еще одна идея, которая мне приходит в голову, – разрешить использование коротких замыканий в классах, таких как геттеры и сеттеры Функции.

class Post {
    private $title;

    fn getTitle() => $this->title;
}

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

От: https://learnku.com/php/t/28219

Дополнительные статьи: https://learnku.com/php/c/tra…