2011-02-07 57 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 - 這是一個回調,這是我所指出的,但我不知道這是正確的。

而且,在此代碼的質量(或缺乏)任何其他意見,將不勝感激:)

+2

很好的問題。 – zerkms 2011-02-07 07:32:48

回答

32

正確的類型提示是callable,它已在例如PhpStorm中長期可用,並且是當前正在規範中的PSR-5的一部分。

(我很驚訝,沒有人提到callable,這不是什麼新和已經到處使用了多年 - 據我所知,callback是不是,也永遠是一個定義PHP pseudo-type

注意callable不僅包括關閉,還有「老派」PHP回調,例如array($object, 'methodName')array('ClassName', 'methodName')甚至'function_name' - 爲了最大限度地發揮您API的實用性,您應該涵蓋所有這些用例,這很容易,因爲call_user_funccall_user_func_array都支持所有四種可調用類型:function-name as string,object /方法名稱,類/方法名稱和關閉。

0

@param標籤的文檔似乎並不已在永世被更新,所以它不」不要說關於create_function()的關閉甚至是回調。

如果phpDocumentor拒絕將callback作爲數據類型識別,則必須使用mixed

+0

我不確定它是否將`callback`識別爲數據類型。 – 2011-02-07 07:33:58

+0

@Billy ONeal:我想你必須通過phpDocumentor運行PHP文件並找出答案。或者,如果你只是非正式地做這些,而不需要生成文檔頁面,只需調用它`callback`就不會受到傷害。 – BoltClock 2011-02-07 07:36:42

1

phpDoc沒有真正指定接受的變量類型,只是它們應該是有效的php變量類型的名稱。在這種情況下,「回調」是正確的。這是PHP中僞類型的名稱。

6

「回調」在phpDocumentor中確實是一個有效的數據類型......我剛剛驗證了它......至少使用PHP 5.2.4。 「有效的數據類型」依賴於你運行phpDocumentor的PHP版本是可行的。

+0

正確答案是`callable`。 – 2014-02-11 14:01:37