PHPDoc中Closure的语法

Ren*_*och 18 php closures phpdoc

我无法在PHPDoc中找到关于Closure类型的任何文档.所以我的问题是如何定义发送到闭包的参数的参数及其返回值?

例:

我如何描述"回调"将获得"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);
})
Run Code Online (Sandbox Code Playgroud)

或者如果它可能的话?

ash*_*azg 15

@param callable $callback确实是用于该部分的语法.您不是将该参数限制为闭包本身...在该实现中将接受传递给它的任何可调用对象.Callable是一种合法的"PHP类型",因此phpDocumentor将其视为有效的Type.

在您的示例代码中,实际上没有理由假设您的changer()方法返回a MyOtherCustomClass(),因为这完全取决于您在changer()使用中稍后编写闭包的方式.在最好的情况,你会在评论表示,在changer()使用情况这一特定用途的changer()回报MyOtherCustomClass,因为它是使用的实现,而不是changer()实现本身,该函数返回一个特定类型的对象.

至于记录传递的callable被"必需"接受的参数,我想你必须在param标签的描述部分中这样做.没有语法来描述这种情况.

如果我以这种方式实现某些东西,我会强加一个接口,callables必须全部显式返回,因此我可以编写changer()返回该接口.当然,这意味着您MyOtherCustomClass必须实现该接口,但在我看来,这似乎是接近"强制执行"返回类型的唯一方法changer().