Exécuter du code PHP encapsulé avec une closure

Publié le 30/09/2023 • Actualisé le 30/09/2023


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous voyons comment exécuter du code PHP encapsulé avec une closure 🇬🇧 Parfois, on a besoin d'exécuter du code qui soit encapsulé par un autre code, comme des tâches récurrentes qui doivent être lancées avant et après ce que l'on veut exécuter. Pour ce faire, on peut utiliser une closure. Dans l'exemple suivant, quoi que soit le code que nous passons à la fonction snippet267UseClosureAsArgument, il est d'abord affiché "before", puis le code que nous avons passé en paramètre est exécuté, et finalement "after" est affiché.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
trait Snippet276Trait
{
    public function snippet276(): void
    {
        $this->snippet267UseClosureAsArgument(function () {
            echo 'With an anonymous function';
        });

        $closure = function () {
            echo 'With a closure assigned to a variable';
        };
        $this->snippet267UseClosureAsArgument($closure);

        $this->snippet267UseClosureAsArgument(fn () => print ('With an arrow function'));

        // That's it! 😁
    }

    public function snippet267UseClosureAsArgument(\Closure $closure): void
    {
        echo 'before'.PHP_EOL;
        $closure();
        echo PHP_EOL.'after';
        echo PHP_EOL.PHP_EOL;
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc  Plus sur le web  Snippet aléatoire

  Travaillez avec moi !