2013-05-16 16 views
13

PHPDocのClosure型に関するドキュメントは見つかりません。だから私の質問は、どのように私はクロージャとその戻り値に送信されるパラメータのパラメータを定義するのですか?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型"なので、phpDocumentorはそれを有効な型として受け入れます。あなたのコード例で

、それは純粋にあなたがchanger()の使用の後の閉鎖を書く方法によって決定されているので、あなたのchanger()方法は、MyOtherCustomClass()を返すことを推測する理由は、実際にないがあります。それはその使用法の実装であるため、せいぜい、あなたは、changer()リターンMyOtherCustomClassこの特定の使用することをでコメントに特定のタイプのオブジェクトを返すことchanger()実装自体を、changer()使用法を示していないと思います。

渡された呼び出し可能コードが受け入れるために必要な引数を文書化するためには、paramタグの説明部分でそれを行う必要があると思います。このような場合を記述する構文はありません。

このように何かを実装する場合は、呼び出し可能なものがすべて明示的に返されなければならないインターフェイスを課し、したがってchanger()がそのインターフェイスを返すように書くことができます。もちろん、これはあなたのMyOtherCustomClassがそのインターフェースを実装しなければならないことを意味しますが、これは返り値のタイプをchanger()から "強制"に近づける唯一の方法と思われます。

+0

コードをリワットすると、インターフェイスで問題を解決できる可能性があります。私の場合、それはオプションではありません。 –

+0

確かに、コードの書き換えは制約になる可能性があります。私は、私が除外したオプションについて考えてみると、時には他の新しいアイデアが現れることがあることが分かったので、誰かの質問を考えながら。 – ashnazg

+0

私は現在のプロジェクトでは使えないchceckマークをつけています。それは一般的な問題の解決策です:) –

関連する問題