Maison > développement back-end > PHP7 > le corps du texte

Fonctions fléchées dans PHP 7.4

藏色散人
Libérer: 2023-02-17 13:12:02
original
4660 Les gens l'ont consulté

Les fermetures courtes, également connues sous le nom de fonctions fléchées, sont une manière d'écrire des fonctions courtes en PHP. Cette notation est utile lors du passage de fermetures à des fonctions telles que array_map ou array_filter.

Ils ressemblent à ceci :

// A collection of Post objects
$posts = [/* … */];
$ids = array_map(fn($post) => $post->id, $posts);
Copier après la connexion

Avant cela, il fallait écrire comme ceci :

$ids = array_map(function ($post) {
    return $post->id;
}, $posts);
Copier après la connexion

Résumons comment utiliser les fermetures courtes.

● Disponible depuis PHP 7.4

● Ils commencent par le mot clé fn

● Ils ne peuvent avoir qu'une seule expression, l'instruction return

● L'instruction return le mot clé n'est pas autorisé

● Les types de paramètres et de retour peuvent être indiqués

Une manière plus strictement typée d'écrire l'exemple ci-dessus pourrait être :

$ids = array_map(fn(Post $post): int => $post->id, $posts);
Copier après la connexion

Deux autres choses à mention :

● L'opérateur spread est autorisé

● Les références sont autorisées, les deux paramètres peuvent être utilisés comme valeurs de retour

Si vous souhaitez renvoyer une valeur par référence , vous devez utiliser la syntaxe suivante :

fn&($x) => $x
Copier après la connexion

Bref, une fermeture courte a la même fonctionnalité qu'une fermeture normale, sauf qu'elle n'autorise qu'une seule expression.

#Pas de lignes multiples

Vous avez bien lu : une fermeture courte ne peut avoir qu'une seule expression. Cela signifie que vous ne pouvez pas inclure plusieurs lignes.

La raison est la suivante :

Le but des fermetures courtes est de réduire la verbosité. fn est bien sûr plus court que function dans tous les cas. Cependant, le créateur du RFC, Nikita Popov, estime que si vous utilisez des fonctions multilignes, vous gagnerez moins à utiliser des fermetures courtes.

Après tout, les fermetures sur plusieurs lignes sont déjà plus verbeuses par définition, donc pouvoir ignorer deux mots-clés (fonction et retour) ne fera pas beaucoup de différence ;

Que vous soyez d'accord ou non avec ce point de vue, cela dépend de vous. Bien que je puisse penser à de nombreuses fermetures sur une seule ligne dans mes projets, il existe également de nombreuses fermetures sur plusieurs lignes, et dans ces cas, la syntaxe courte me manque personnellement.

Il y a cependant de l'espoir : il sera peut-être possible d'ajouter de courtes fermetures multilignes à l'avenir, mais ce n'est qu'une RFC.

# Valeur de la portée externe

Une autre différence significative entre les fermetures courtes et les fermetures normales est que les fermetures courtes ne nécessitent pas le mot-clé use pour pouvoir récupérer de la portée externe accéder aux données.

$modifier = 5;
array_map(fn($x) => $x * $modifier, $numbers);
Copier après la connexion

Il convient de noter que les variables de la portée externe ne peuvent pas être modifiées. Les valeurs sont liées à une valeur et non à une référence. Cela signifie que vous pouvez modifier $modifier dans une courte période de fermeture, même si cela n'affectera pas la variable $modifier dans la portée externe.

La seule exception bien sûr est le mot-clé $this, qui fonctionne exactement comme une fermeture normale :

array_map(fn($x) => $x * $this->modifier, $numbers);
Copier après la connexion

# possibilités futures

Je l'ai déjà mentionné fermetures courtes multilignes, cela reste une possibilité à l'avenir.

Une autre idée est d'autoriser une syntaxe de fermeture courte dans les classes, telles que les getters et les setters :

class Post {
    private $title;
 
    fn getTitle() => $this->title;
}
Copier après la connexion

Dans l'ensemble, les fermetures courtes sont une fonctionnalité bienvenue, bien qu'il y ait encore place à l'amélioration. Le plus important est probablement les fermetures courtes multilignes

Traduction : https://stitcher.io/blog/short-closures-in-php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal