2013-05-16 2 views
13

PHPDoc의 Closure type에 관한 문서는 찾을 수 없습니다. 그래서 내 질문은 어떻게 폐쇄 매개 변수와 반환 값으로 전송 매개 변수의 매개 변수를 정의합니까?PHPDoc 클로저 문법

예 : 내가 그는 "MyCustomClass", 숫자 및 문자열을 얻을, 그리고 "MyOtherCustomClass"를 반환합니다 "콜백"설명하려면 어떻게

?

/** 
* @param MyCustomClass $cls 
* @param Closure  $callback this isn't really explaining what this is 
* 
* @return MyOtherCustomClass 
*/ 
function changer($cls, $callback){ 

    return $callback($cls, 2, "a string"); 
} 

changer($aCustomeClass, function($cls, $int, $string){ 
    return new MyOtherCustomClass($cls, $int, $string); 
}) 

아니면 가능한 경우?

+0

주석에 설명하는 것이 합리적이라고 생각하지 않습니다. PHP 매뉴얼에서도 인자에 대한 설명에서'callable'으로 참조됩니다. –

+0

그것은 무엇을 두려워하지만 그것이 가능하다면 좋을 것입니다. –

+1

"깊이있는 클로저 정의"토론 : https://github.com/phpDocumentor/phpDocumentor2/issues/830 –

답변

10

@param callable $callback 실제로 그 부분에 사용되는 구문입니다. 이 매개 변수를 클로저 자체로 제한하지 않고 전달되는 모든 호출 가능 항목은 해당 구현에서 허용됩니다. Callable은 합법적 인 "PHP type"이므로, phpDocumentor는 그것을 유효한 Type으로 받아들입니다. 그는 순전히 나중에 changer() 사용의 폐쇄를 작성하는 방법에 의해 결정되기 때문에 귀하의 예제 코드에서

는, 실제로 하지 당신의 changer() 방법은 MyOtherCustomClass()을 반환 추정하는 이유가있다. 기껏해야, 당신은에서 코멘트 changer() 사용을 나타내는 것 changer() 반환 MyOtherCustomClass이 특정 사용, 그것 때문에 그 객체의 특정 유형을 반환 사용의 구현이 아닌 changer() 구현 자체.

전달 된 호출 가능 함수가 "필요"하다고 받아들이는 인수를 문서화하는 경우 param 태그의 설명 부분에서이를 수행해야한다고 생각합니다. 그러한 경우를 설명하는 구문은 없습니다.

이런 식으로 뭔가를 구현할 경우 호출 가능 함수가 모두 명시 적으로 반환해야하는 인터페이스를 적용하므로 changer()이 해당 인터페이스를 반환한다고 쓸 수 있습니다. 물론, 이는 귀하의 MyOtherCustomClass이 해당 인터페이스를 구현해야 함을 의미하지만, 이는 제가 changer()에서 반환 유형을 "시행"할 수있는 유일한 방법 인 것처럼 보입니다.

+0

코드를 리 워팅하면 인터페이스가 문제를 해결할 수 있습니다. 내 경우에는 그게 옵션이 아닙니다. –

+0

실제로 코드 재 작성은 제약이 될 수 있습니다 .- 제가 배제한 옵션에 대한 생각은 때로는 다른 새로운 아이디어를 내놓을 수 있기 때문에 누군가의 질문을 생각하면서 저에게 오는 그런 것들을 언급하는 경향이 있음을 발견했습니다 . – ashnazg

+0

당신은 chceck 마크를 가지고 ... 그게 내 현재 프로젝트에 유용하지 않습니다 일반적으로 문제에 대한 해결책입니다 :) –