2013-04-10 2 views
1

클로저는 반사에 완전히 노출 된 것처럼 보이지 않습니다. 가 정의 된 곳PHP 익명 함수가 정의 된 곳을 찾을 수 있습니까?

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

하지만하지 :

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

당신은 익명 함수의 매개 변수를 얻을 수 있습니다 대상으로 검사에, 유용한 아무것도하지 않는 것

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

아이디어가 있으십니까?

답변

3

ReflectionObject 대신 ReflectionFunction이 (가) 있습니다.

Here입니다. 심지어는 isClosure 메서드를 포함하며 클로저를 생성자 인수로 받아들입니다. :-)

예 :

$callback = function(){ echo 'hello'; }; 
$r = new ReflectionFunction($callback); 
$startLine = $r->getStartLine(); 
$file = $r->getFileName(); 
$is_closure = $r->isClosure(); 
+0

감사합니다. 부분적으로 만 문서를 읽고 "이름"매개 변수에 문자열이 필요하다고 가정합니다. –

+0

(미래의 방문자를 위해)'__construct()'인수를 위해 클로저를 취할 수 있다고 내 대답을 업데이트했습니다. –

관련 문제