Utiliser une fonction anonyme pour assigner le résultat d'un switch-case à une variable

Publié le 04/12/2020 • Actualisé le 04/12/2020


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 allons voir comment utiliser une fonction anonyme pour assigner le résultat d'un switch-case à une variable. Dans la closure nous utilisons des early returns afin de ne pas avoir d'instruction break à mettre. Veuillez noter que cette manière de faire n'est pertinente que pour PHP 7.4 et les versions antérieures. Avec PHP 8, on peut désormais utiliser la fonction match() qui est précisément adaptée à ce cas.


<?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 Snippet122Trait
{
    public function snippet122(): void
    {
        $i = random_int(0, 10);
        echo '$i = '.$i;
        echo "\n";

        $returnValue = (static function ($i) {
            switch ($i) {
                case 0:
                    return 4;
                case 1:
                    return 6;
                case 2:
                case 3:
                    return 5;
                default:
                    return null;
            }
        })($i);

        echo '$returnValue: '.$returnValue;
        echo "\n";

        // With PHP 8 we can use the new match() function ——————————————————————
        $returnValue = match ($i) {
            0 => 4,
            1 => 6,
            2, 3 => 5,
            default => null,
        };

        echo '$returnValue: '.$returnValue;

        // Much is more concise!

        // That's it! 😁
    }
}

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

  Travaillez avec moi !