1

閉鎖は反射に完全にさらされていないようです。オブジェクトとして検査すると、何も役に立たないようです:

$foo = function ($a, $b) {};
$ref = new ReflectionObject($foo);
var_dump($ref->getFileName()); // false

無名関数のパラメータを取得できます:

$invoker = $ref->getMethod('__invoke');
var_dump($invoker->getParameters()); // "a" and "b"!

しかし、それが定義された場所ではありません:

var_dump($invoker->getFileName()); // false

何か案は?

4

1 に答える 1

3

ReflectionFunctionあなたが探しているのはの代わりだと思いますReflectionObject

ここに参照があります。メソッドも含まれてisClosureおり、コンストラクターの引数としてクロージャーを受け入れます。:-)

例:

$callback = function (){ echo 'hello'; };
$r = new ReflectionFunction($callback);
$startLine = $r->getStartLine();
$file = $r->getFileName();
$is_closure = $r->isClosure();
于 2013-04-10T16:41:49.317 に答える