Retourne la closure en cours d'exécution

# Closure::getCurrent

(PHP 8 >= 8.5.0)

Closure::getCurrent — Retourne la closure en cours d'exécution

### Description

public static function Closure::getCurrent(): Closure

Retourne la closure en cours d'exécution. Cette méthode est principalement utile pour implémenter des closures récursives sans avoir besoin de capturer une référence vers la variable de la closure en utilisant le mot-clé `use`.

Cette méthode doit être appelée depuis une closure ; l'appeler en dehors d'un contexte de closure provoquera l'erreur `Error: Current function is not a closure.`

### Liste de paramètres

Cette fonction ne contient aucun paramètre.

### Valeurs de retour

Retourne l'instance de Closure en cours d'exécution.

### Erreurs / Exceptions

Lance une Error si elle est appelée en dehors d'un contexte de closure.

### Exemples

Exemple #1 Exemple avec Closure::getCurrent()

Utilisation de Closure::getCurrent() pour implémenter une fonction de Fibonacci récursive :

    <?php
    $fibonacci = function (int $n) {
        if ($n === 0 || $n === 1) {
            return $n;
        }

        $fn = Closure::getCurrent();
        return $fn($n - 1) + $fn($n - 2);
    };

    echo $fibonacci(10); // Affiche : 55
    ?>

Exemple #2 Comparaison avec l'approche traditionnelle

Avant PHP 8.5, implémenter des closures récursives nécessitait de capturer une référence vers la variable de la closure en utilisant le mot-clé `use` :

    <?php
    // Approche traditionnelle (fonctionne toujours en PHP 8.5)
    $fibonacci = function (int $n) use (&$fibonacci) {
        if ($n === 0) return 0;
        if ($n === 1) return 1;
        return $fibonacci($n - 1) + $fibonacci($n - 2);
    };

    echo $fibonacci(10); // Affiche : 55
    ?>

L'approche avec Closure::getCurrent() élimine le besoin de déclarer la variable avec une référence dans la clause `use`, rendant le code plus propre et moins sujet aux erreurs.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open