(PHP 8 >= 8.5.0)
Closure::getCurrent — Retorna o closure em execução no momento
Retorna o closure em execução no momento. Este método é útil principalmente
para implementar closures recursivos sem a necessidade de capturar uma referência
à variável do closure com a palavra-chave use.
Este método precisa ser chamado de dentro de um closure; chamá-lo de fora de um contexto de closure resultará em um erro.
Esta função não possui parâmetros.
Retorna a instância do Closure em execução.
Lança um Error se chamado de fora de um contexto de closure.
Exemplo #1 Exemplo de Closure::getCurrent()
Usando Closure::getCurrent() para implementar uma função de Fibonacci recursiva:
<?php
$fibonacci = function (int $n) {
if (0 === $n || 1 === $n) {
return $n;
}
$fn = Closure::getCurrent();
return $fn($n - 1) + $fn($n - 2);
};
echo $fibonacci(10); // Exibe: 55
?>Exemplo #2 Comparação com método tradicional
Antes do PHP 8.5, para implementar closures recursivos era necessário capturar uma referência
à variável do closure usando a palavra-chave use:
<?php
// Método tradicional (ainda funciona no 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); // Exibe: 55
?>
O método Closure::getCurrent() elimita a necessidade de
declarar a variável com uma referência na cláusula use,
tornando o código mais limpo e menos suscetível a erros.