現在実行中のクロージャを返す

# Closure::getCurrent

(PHP 8 >= 8.5.0)

Closure::getCurrent — 現在実行中のクロージャを返す

### 説明

public static function Closure::getCurrent(): Closure

現在実行中のクロージャを返します。このメソッドは主に、 `use` キーワードを使ってクロージャ変数への参照をキャプチャすることなく、 再帰的なクロージャを実装するのに役立ちます。

このメソッドはクロージャの内部から呼び出す必要があります。 クロージャのコンテキスト外から呼び出すと、 `Error: Current function is not a closure.` が発生します。

### パラメータ

この関数にはパラメータはありません。

### 戻り値

現在実行中の Closure を返します。

### エラー / 例外

クロージャのコンテキスト外から呼び出された場合、 Error をスローします。

### 例

例1 Closure::getCurrent() の例

Closure::getCurrent() を使って 再帰的なフィボナッチ関数を実装する例:

    <?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); // 出力: 55
    ?>

例2 従来のアプローチとの比較

PHP 8.5 より前のバージョンでは、再帰的なクロージャを実装するには `use` キーワードを使ってクロージャ変数への参照をキャプチャする必要がありました:

    <?php
    // 従来のアプローチ (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); // 出力: 55
    ?>

Closure::getCurrent() を使うアプローチでは、 `use` 句で変数を参照で宣言する必要がなくなり、 コードがよりクリーンで間違いにくくなります。

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