20

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);
})

または、それが可能な場合は?

4

2 に答える 2

18

@param callable $callback実際、その部分に使用する構文です。そのパラメーターをクロージャー自体に制限しているわけではありません...それに渡された呼び出し可能なものはすべて、その実装で受け入れられます。Callable は正当な「PHP タイプ」であるため、phpDocumentor は有効なタイプとして受け入れます。

あなたのコード例では、メソッドが を返すと仮定する理由は実際にはありません。これは、使用法で後でクロージャをどのように記述するかによって純粋に決定されるためです。せいぜい、特定のタイプのオブジェクトを返すのは実装自体ではなく、その使用法の実装であるため、使用法のコメントこの特定の使用法がreturn であることを示すでしょう。changer()MyOtherCustomClass()changer()changer()changer()MyOtherCustomClasschanger()

渡されたcallableが受け入れるために「必要」である引数を文書化することについては、paramタグの説明部分でそれを行う必要があると思います。このような場合を説明する構文はありません。

この方法で何かを実装するとしたら、callable がすべて明示的に返さなければならないインターフェイスを課すことになるので、changer()そのインターフェイスを返すように書くことができます。もちろん、これはMyOtherCustomClassそのインターフェイスを実装する必要があることを意味しますが、それでも、 からの戻り値の型を「強制」するのに近づく唯一の方法のように思えますchanger()

于 2013-05-17T17:58:00.980 に答える