2011-02-07 10 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

उत्तर

32

सही प्रकार-संकेत callable है, जो कि लंबे समय तक पीएचस्टॉर्म में उपलब्ध है, और PSR-5 का हिस्सा है जो वर्तमान में विनिर्देशन में है।

(मैं हैरान किसी और callable उल्लेख कर रहा हूँ, यह कुछ भी नया है और साल के लिए हर जगह इस्तेमाल किया गया है - मेरी जानकारी के लिए, callback नहीं है और एक परिभाषित पीएचपी pseudo-type कभी नहीं था)

ध्यान दें कि callable बस नहीं शामिल बंद, लेकिन "पुराना स्कूल" PHP कॉलबैक, उदाहरण के लिए array($object, 'methodName') या array('ClassName', 'methodName') और यहां तक ​​कि 'function_name' - आपके एपीआई की उपयोगिता को अधिकतम करने के लिए, आपको उन सभी उपयोग-मामलों को कवर करना चाहिए, जो कि काफी आसान है, क्योंकि call_user_func और call_user_func_array कॉलबेल की सभी चार किस्मों का समर्थन करते हैं: कार्य-नाम स्ट्रिंग, ऑब्जेक्ट/विधि-नाम, कक्षा/विधि-नाम और बंद करें।

+3

जब ये सभी उत्तर लिखे गए थे, तो 'कॉलबैक' सही जवाब था। PHP छद्म-प्रकार आलेख को उद्धृत करने के लिए जिस पर आपने लिंक किया था: "कॉलबैक छद्म प्रकारों का उपयोग इस दस्तावेज़ीकरण में किया गया था, इससे पहले कि कॉल 5.4 के द्वारा कॉल करने योग्य प्रकार संकेत पेश किया गया था। इसका मतलब बिल्कुल वही है।" अन्य सभी उत्तरों और प्रश्न PHP 5.4 का अनुमान लगाते हैं, इसलिए वे उस वक्त सही थे। –

0

@param टैग के लिए प्रलेखन युगों में अपडेट किया गया है प्रतीत नहीं होता है, तो यह 'नहीं करता है create_function() के साथ बंद होने या यहां तक ​​कि कॉलबैक के बारे में कुछ भी नहीं कहें।

यदि phpDocumentor डेटा प्रकार के रूप में callback को पहचानने से इंकार कर देता है, तो आपको mixed के साथ जाना होगा।

+0

मुझे यकीन नहीं है कि यह 'कॉलबैक' को डेटाटाइप के रूप में पहचानता है या नहीं। –

+0

@ बिली ओनेल: मुझे लगता है कि आपको phpDocumentor के माध्यम से PHP फ़ाइलों को चलाने और पता लगाना होगा। या यदि आप दस्तावेज़ पृष्ठों को उत्पन्न करने के बिना अनौपचारिक रूप से ऐसा कर रहे हैं, तो बस इसे 'कॉलबैक' कहकर चोट नहीं पहुंचीगी। – BoltClock

1

phpDoc वास्तव में निर्दिष्ट नहीं है कि स्वीकार्य चर प्रकार क्या हैं, बस वे वैध PHP चर प्रकारों के नाम होना चाहिए। इस मामले में "कॉलबैक" सही होगा। यह PHP में छद्म प्रकार का नाम है।

6

"कॉलबैक" phpDocumentor में मान्य डेटाटाइप के रूप में काम करता है ... मैंने इसे सत्यापित किया है ... कम से कम PHP 5.2.4 का उपयोग करके। यह संभव है कि "मान्य डेटाटाइप" PHP संस्करण पर निर्भर करता है जिसके साथ आप phpDocumentor चलाते हैं।

+0

सही उत्तर 'कॉल करने योग्य' है। –

+2

यह उत्तर लिखा गया था जब यह उत्तर सही था। हालांकि, अब यह PHP 5.4 के रूप में सही उत्तर नहीं है। –

संबंधित मुद्दे