Closure::getCurrent

(PHP 8 >= 8.5.0)

Closure::getCurrentRetourne la closure en cours d'exécution

Description

public static 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.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top