Closure::getCurrent

(PHP 8 >= 8.5.0)

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

説明

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

add a note

User Contributed Notes

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