2011-02-07 35 views
24

私は、データベースから変更されたプリオーダーツリートランスバーサルツリーを抽出し、コールバック関数を使用してそれをフィルタリングするメソッドを持っています。たとえば:コールバックはどのようにPHPDocする必要がありますか?

/** 
* Recursive function for building the Cas_Template_TreeNode. 
* 
* @static 
* @param array $rows 
* @param callback $filter A function to filter the tree by (return a value convertible to false to remove the item from the tree) 
* @return array 
*/ 
private static function MakeTreeGivenDbRows($rows, $filter = null) 
{ 
    if ($filter === null) 
    { 
     $filter = function($unused) 
     { 
      return true; 
     }; 
    } 
    $result = array(); 
    $childrenCount = 0; 
    for ($idx = 0; $idx < count($rows); $idx += $childrenCount + 1) 
    { 
     $current = $rows[$idx]; 
     $childrenCount = self::ChildrenCountFromRow($current); 
     if (!$filter($current)) 
     { 
      continue; 
     } 
     $childrenStartAt = $idx + 1; 
     $childRows = array_slice($rows, $childrenStartAt, $childrenCount); 
     $children = self::MakeTreeGivenDbRows($childRows, $filter); 
     $result[] = new Cas_Template_TreeNode(self::MakeNodeGivenDbRow($current), $children); 
    } 
    if (empty($result)) 
    { 
     return null; 
    } 
    return $result; 
} 

私はたPHPDocは、変数$filterのためにどうあるべきかわからない - それは私が指示した内容で、コールバック、ですが、私はそれが正しいかどうか分かりません。

また、このコードでは、品質(またはその欠如)上の任意の他のコメントは@paramタグのドキュメントは、長い年月に更新されているようには見えない

+2

すばらしい質問です。 – zerkms

答えて

32

正しいタイプヒントはcallableで、これは例えばPhpStormなどで長年利用されており、現在は仕様の下にあるPSR-5の一部です。

(私は誰もがcallableを述べていない驚いて、それは新しい何もないと年のためにどこでも使用されてきた - 私の知る限り、callbackではないと決して定義されたPHP pseudo-typeた)

callableだけではなく、含まれていることクロージャだけでなく、 "old school" PHPコールバック、例えばarray($object, 'methodName')またはarray('ClassName', 'methodName')、さらには'function_name' - call_user_funccall_user_func_arrayの両方がcallableの4種類すべてをサポートしているので、あなたのAPIの有用性を最大限に引き出すには、これらのユースケースをすべてカバーする必要があります。function-name as string、object /メソッド名、クラス/メソッド名、およびクロージャ。

+3

これらの答えがすべて書かれたとき、 'callback'が正解でした。あなたがリンクしているPHP擬似型記事を引用するには: "callback型ヒントがPHP 5.4で導入される前に、このドキュメントではコールバック擬似型が使われていました。その他の答えと質問はPHP 5.4より前のものですから、当時は正しいものでした。 –

0

:)いただければ幸いですので、それはdoesnのクロージャーやコールバックについても、create_function()で何か言ってください。

phpDocumentorがcallbackをデータ型として認識しない場合は、mixedとする必要があります。

+0

'callback'をデータ型として認識するかどうかわかりません。 –

+0

@Billy ONeal:phpDocumentorでPHPファイルを実行して見つけなければならないと思います。あるいは、あなたがdocページを生成する必要なしにこれを非公式にやっているのであれば、 'callback'を呼ぶだけで害はありません。 – BoltClock

1

phpDocでは、受け入れられた変数の型が実際に指定されているわけではなく、有効なPHP変数型の名前にする必要があります。この場合、「コールバック」は正しいでしょう。これはPHPの疑似型の名前です。

6

"callback"はphpDocumentorの有効なデータ型として機能します...私はそれを確認しました。少なくとも、PHP 5.2.4を使用してください。 「有効なデータ型」は、phpDocumentorを実行するPHPのバージョンによって異なります。

+0

正解は 'callable'です。 –

+2

この回答は書かれた時点で正しいものでした。しかし、それはもはやPHP 5.4の正解ではありません。 –

関連する問題