« Closure::fromCallable
stdClass »

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 句で変数を参照で宣言する必要がなくなり、 コードがよりクリーンで間違いにくくなります。

関連キーワード:
クロージャ   Closure   getCurrent   fibonacci   return   変数   再帰   実装   アプローチ   キーワード   キャプチャ   コンテキスト   従来   fromCallable   stdClass   static   内部   Current   closure   フィボナッチ   宣言   コード
関連する関数・ページ:
class.closure   closure.call   closure.fromcallable   closure.bind   closure.bindto   reflectionfunction.getclosure