2017-04-30 6 views
5

PHP7 में, जब कोई विधि किसी दिए गए पैरामीटर प्रकार और परिणाम प्रकार सेट करती है, तो क्या उन्हें PHPDoc में फिर से दस्तावेज़ करना आवश्यक है?PHP7 का उपयोग करते समय, क्या PHPDoc के साथ विधियों को दस्तावेज करना आवश्यक है?

function foo(string $text): bool 
{ 
    return true; 
} 

के बाद से

के बराबर है
/** 
* @param string $text 
* @return bool 
*/ 
function foo($text) { 
    return true; 
} 

यह इन जानकारियां नकल करने के लिए आवश्यक है?

/** 
* @param string $text 
* @return bool 
*/ 
function foo(string $text): bool 
{ 
    return true; 
} 

संपादित करें: मैं phpdoc का उपयोग नहीं करते मेरी कोड के प्रलेखन उत्पन्न करने के लिए है, लेकिन मेरे और PHPStorm की मदद से अपने सहकर्मियों के लिए तरीकों में एक निरंतरता बनाए रखने के लिए।

+0

में निर्दिष्ट करके किया जाना है, क्या आप यह देखने के लिए phpdoc चलाते हैं कि जब आप पैरामीटर और परिणाम प्रकार घोषित करते हैं तो यह कैसा व्यवहार करता है? यह आपको अपना जवाब देगा। –

+0

@ जॉन कॉन्ड, PHP वाक्य इस वाक्यविन्यास को पहचानने में सक्षम नहीं है? –

+0

@MarcBrillault वह क्या कहने का प्रयास कर रहा है: ** इसे आज़माएं और देखें ** – Xatenev

उत्तर

4

docblock कुछ है कि एक सांकेतिक शब्दों में बदलनेवाला समझाने के लिए क्या एक समारोह, करता है यह, पीएचपी पार्सर द्वारा नजरअंदाज कर दिया जाएगा के रूप में यह सिर्फ एक टिप्पणी है कि यह एक है का उपयोग कर सकते है पा सकते हैं प्रत्येक कार्य और विधि के ऊपर एक डॉकब्लॉक डालने का अच्छा अभ्यास, क्योंकि जब कोई (या आप) कोड पढ़ता है तो यह देखना आसान होता है कि फ़ंक्शन क्या करता है।

एक आईडीई आम तौर पर स्वत: पूर्ण के लिए, docblock तथापि string और :bool द्वारा ओवरराइड कर दिया जाएगा करने के लिए जब ब्लॉक कोड

हालांकि

function foo(string $text): bool 
{ 
    return true; 
} 

से मेल नहीं खाता docblock का उपयोग करता है के बराबर नहीं है

/** 
* @param string $text 
* @return bool 
*/ 
function foo($text) { 
    return true; 
} 

:bool पहले उदाहरण में लागू करता है कि foo() या तो true या false देता है, कुछ भी और PHP उस प्रकार की वापसी को डालने का प्रयास करेगा या घातक त्रुटि फेंक देगा। यह $text के लिए टाइपहिंट string के साथ समान है।पहले पैरामीटर, प्रकार तार का एक मान होना चाहिए अन्यथा पीएचपी एक स्ट्रिंग के लिए डाले करने के लिए या एक गंभीर त्रुटि

@return bool और @param string कुछ भी नहीं लागू करता है, बस का कहना है कि प्रत्याशित प्रतिफल है फेंक दिया जाएगा कोशिश करता है या तो true या

function foo(string $a) :bool 
{ 
    var_dump($a); // string '10' 
    return "string"; 
} 

var_dump(foo(10)); // bool true 

वहाँ कोई समस्या नहीं है, पीएचपी एक स्ट्रिंग के लिए 10 डाल सकता और "string"true नहीं है है: false

निम्नलिखित उदाहरण लें हालांकि

function foo(PDO $a) :bool 
{ 
    var_dump($a); 
    return "string"; 
} 

var_dump(foo(10)); // fatal error, 10 is not PDO and can not be cast to PDO 

निम्नलिखित docblock का उपयोग

नोट (क्योंकि आप शायद एक पीडीओ वस्तु के साथ कुछ करने के लिए कोशिश कर रहे हैं शायद आगे पर अन्य समस्याओं में चल रहा है) पिछले एक काम करने के साथ एक समस्या: पीएचपी करता है मिश्रित प्रकार टाइपिंगटिंग (यानी स्ट्रिंग | सरणी) के लिए अभी तक समर्थन नहीं है, जिसे अभी भी इसे डॉकब्लॉक

+0

पूर्ण उत्तर के लिए धन्यवाद! और मिश्रित प्रकार का जिक्र करने के लिए भी। –

+0

धन्यवाद, यह देखकर आश्चर्य हुआ कि PHP प्रकारों को कास्ट करने का प्रयास करेगा। इसे लिखने से पहले मैंने सोचा था कि यह हमेशा घातक त्रुटि फेंक देगा, फिर मैं गया और मेरे foo उदाहरणों की कोशिश की और – Jelmergu

+0

के परिणाम से आश्चर्यचकित हुआ अगर आप 'घोषणा (सख्त_types = 1)' के साथ प्रकार संकेत और वापसी मान चेक लागू करते हैं तो आप कर सकते हैं इनपुट तर्क पर भरोसा करें कि वास्तव में 'स्ट्रिंग' टाइप करें और पिछले उदाहरण के रूप में 'int' नहीं', और पिछले उदाहरण के रूप में 'स्ट्रिंग' के बजाय वास्तविक मूल्य' bool' वापस करें। सीधे शब्दों में कहें, 'घोषणा (सख्त_types = 1)' का उपयोग करें और आप सुरक्षित हैं। – ManInTheBox

3

PHP 7 में यह आवश्यक नहीं है क्योंकि वे वही हैं। यदि आपके पास दोनों हैं, तो यह वास्तव में सिंक से बाहर हो सकता है अगर बाद में आप दूसरे को बदलने के बिना बदल जाते हैं।

यहां आप अधिक जानकारी https://wiki.php.net/rfc/scalar_type_hints_v5

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

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