Maison >développement back-end >tutoriel php >Explication détaillée d'exemples de fonctions fléchées en PHP

Explication détaillée d'exemples de fonctions fléchées en PHP

coldplay.xixi
coldplay.xixiavant
2020-07-01 17:44:313567parcourir

Explication détaillée d'exemples de fonctions fléchées en PHP

Les fermetures courtes appelées fonctions de flèche sont l'une des fonctionnalités tant attendues qu'apportera la version PHP7.4. Il a été proposé par Nikita Popov, Levi Morrison et Bob Weinand. Vous pouvez lire la RFC originale ici

Recommandations d'apprentissage associées : Programmation PHP de l'entrée à la maîtrise

Exemple rapide tiré de Doctrine DBAL

//老办法
$this->existingSchemaPaths = array_filter($paths, function ($v) use ($names) {
    return in_array($v, $names);
});

// 使用箭头函数的新方法
$this->existingSchemaPaths = array_filter($paths, fn($v) => in_array($v, $names));

Regardons les règles

  1. sont des mots-clés, pas un nom de fonction réservé. fn
  2. Il ne peut avoir qu'une seule expression, qui est l'instruction return.
  3. ne nécessite pas l'utilisation des mots-clés
  4. et rereturn. use
  5. Les variables, les portées et les portées LSB sont automatiquement liées. $this
  6. Vous pouvez saisir des paramètres d'indice et des types de retour.
  7. Vous pouvez même utiliser des références
  8. et l'opérateur de spread &...
Quelques exemples

//作用域示例
$discount = 5;
$items = array_map(fn($item) => $item - $discount, $items);

//类型提示
$users = array_map(fn(User $user): int => $user->id, $users);

//展开操作符
function complement(callable $f) {
    return fn(...$args) => !$f(...$args);
}

//嵌套
$z = 1;
$fn = fn($x) => fn($y) => $x * $y + $z;

//有效的函数签名
fn(array $x) => $x;
fn(): int => $x;
fn($x = 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, ...$rest) => $rest;

Portée future

    Fonctions fléchées multilignes
  1. Permet l'utilisation de fonctions fléchées pour les fonctions au sein d'une classe.
  2. //现今
    class Test {
        public function method() {
            $fn = fn() => var_dump($this);
            $fn(); // object(Test)#1 { ... }
    
            $fn = static fn() => var_dump($this);
            $fn(); // Error: Using $this when not in object context
        }
    }
    
    //也许在未来的某一天
    class Test {
        private $foo;
        private $bar;
    
        fn getFoo() => $this->foo;
        fn getBar() => $this->bar;
    }
Mes points préférés

    Les rappels peuvent être plus courts
  1. Demander des variables sans le mot-clé
  2. . use
Dites-moi ce que vous pensez de ces mises à jour et quel est votre plat préféré ?

Merci d'avoir lu.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer