2011-10-22 14 views
16

मैं PHP के लिए बिल्कुल नया हूं, और मैंने अभी अपना PHP कोड विकसित करने के लिए नेटबीन का उपयोग करना शुरू कर दिया है।PHP चर प्रकार को एक टिप्पणी में क्यों घोषित करें?

नीले रंग से, जैसा कि मैंने एक क्वेरी में एक चर दर्ज किया है, एक संवाद पॉप अप हुआ और मुझे चर प्रकार को पकड़ने के लिए एक टिप्पणी को पूरा करने के लिए कहा। मैंने कुछ जांच की और पाया कि यह नेटबीन की एक लोकप्रिय विशेषता प्रतीत होता है, लेकिन मुझे को समझाने के लिए मुझे कोई जानकारी नहीं मिली, यह मामला क्यों था।

कोई टिप्पणी में PHP चर के प्रकार क्यों रखना चाहेगा? क्या यह विकास के उपयोग के लिए है, या क्या यह वास्तव में कोड को ही लाभ देता है? क्या यह अभिन्न, या वैकल्पिक है?

+0

क्या आप इसका मतलब बता सकते हैं कि आपका क्या मतलब है? –

+0

@AurelioDeRosa - यहां पृष्ठ का एक लिंक है जो सुविधा का वर्णन करता है: http://blogs.oracle.com/netbeansphp/entry/defining_variable_type_in_a – stefmikhail

+0

ओह ... अब मैं समझता हूं कि आपका क्या मतलब है। खैर, जोनाथन स्पूनर जवाब सही है। –

उत्तर

28

अपनी विधि की टिप्पणी के अंदर @var टैग में टाइप जोड़ने से नेटबीन आपको कोड पूर्ण करने की अनुमति देगा। यह निश्चित रूप से वैकल्पिक है लेकिन आपके कोड को पूरी तरह से दस्तावेज करना हमेशा अच्छा विचार है।

संपादित करें: नेटबीन के लिए आपके लिए टिप्पणियां स्वत: उत्पन्न करने के लिए एक युक्ति /** विस्तार का उपयोग करना है। ऐसा करने के लिए, बस कर्सर को उस प्रॉपर्टी या विधि से ऊपर रखें जिसे आप दस्तावेज़ बनाना चाहते हैं और /** टाइप करें और फिर ENTER कुंजी दबाएं। यह एक phpDoc शैली टिप्पणी का विस्तार करेगा और उचित टैग जोड़ें।

संपादित करें 2: तो आप प्रॉपर्टी पर @var टैग का उपयोग कर सकते हैं और आप एक विधि में पारित कर दिया मानकों के साथ एक ही प्रभाव को प्राप्त करने के लिए एक विधि पर @param टैग का उपयोग कर सकते हैं।

एक संपत्ति पर @var टैग का प्रयोग करते हुए संपत्ति का उपयोग कर आप कोड संकेत दे देंगे किसी भी जहां यह दिखाई दे रहा है:

एक विधि पर @param टैग की
/** 
* 
* @var My_Type 
*/ 
private $_myProperty; 

उपयोग आप कोड संकेत का उपयोग करते समय दे देंगे विधि के अंदर पैरामीटर:

/** 
* 
* @param My_Type $obj 
*/ 
public function myMethod($obj) { 

} 

एक और तरीका है एक समान प्रभाव करते हुए भी प्रकार की सुरक्षा के थोड़ी उपलब्ध कराने के लक्ष्य को हासिल करने के पीएचपी type hinting तंत्र का उपयोग करने के लिए है:

public function myMethod(My_Type $obj) { 

} 

ध्यान दें कि इस विधि में विधि हस्ताक्षर में निर्दिष्ट प्रकार है। नेटबीन अब @param टैग का उपयोग कर उपलब्ध विधि के अंदर एक ही कोड पूर्णता प्रदान करेगा और PHP E_RECOVERABLE_ERROR का उत्पादन करेगा यदि विधि में पारित प्रकार एक ही प्रकार का निर्दिष्ट नहीं है। PHP's documentation regarding errors देखें और यदि आप उपरोक्त त्रुटि के बारे में अधिक जानने में रुचि रखते हैं तो उन्हें कैसे संभालें।

+0

मेरे मामले में, मेरे पास '$ clause' नाम का एक चर है और मुझे' gettype ($ clause) 'का उपयोग करके पता है कि प्रकार 'string' है, फिर भी NetBeans में स्वत: पूर्ण नहीं है एक विकल्प के रूप में' string' नहीं है । क्या यह नेटबीन में एक अलग नाम के तहत है? क्या आप मुझे मेरे मामले के लिए वाक्यविन्यास का एक उदाहरण दे सकते हैं? – stefmikhail

+0

var टैग केवल उपयोगकर्ता परिभाषित प्रकारों या PHP lib में शामिल कक्षाओं के लिए कोड पूर्ण करने का समर्थन करेगा। एक टिप –

+0

के लिए संपादन देखें धन्यवाद, लेकिन मुझे अभी भी मेरे चर के लिए एक प्रकार का चयन करने में समस्याएं आ रही हैं। क्या वहां कहीं दस्तावेज है जो चर के प्रकारों का वर्णन कर सकता है? NetBeans में उपलब्ध सभी विकल्प मेरे लिए विदेशी हैं, और मुझे यकीन नहीं है कि कौन से चयन करना है। जैसा कि मैंने कहा, मैंने '$ clause' के लिए 'string'' के रूप में चर प्रकार को खोजने के लिए 'gettype' का उपयोग किया। फिर भी एक विकल्प के रूप में कोई 'स्ट्रिंग' प्रकार नहीं है। क्या मैं गलत विधि का उपयोग कर रहा हूं? – stefmikhail

1

क्योंकि PHP एक ढीला/बतख टाइप की गई भाषा है, जब आप एक बड़ा प्रोग्राम बनाते हैं तो उन प्रकार के संकेत आपको या अन्य लोगों को यह समझने में मदद कर सकते हैं कि कोई समस्या उत्पन्न होने पर क्या हो रहा है। उदाहरण के लिए, एक मिश्रित प्रकार की उम्मीद और एक पूर्णांक भेजना।

+0

http://php.net/manual/en/language.oop5.typehinting.php –

9

मुझे लगता है कि आप कुछ के बारे में इस तरह बात कर रहे हैं:

/** 
* @var SimpleXMLElement $xml 
*/ 
private $xml; 

यह बहुत phpDoc comment कहा जाता है। यह आपको एपीआई दस्तावेज उत्पन्न करने की अनुमति देता है (like this one for instance)। इसके अलावा, ग्रहण और नेटबीन समेत अधिकांश आईडीई भी उस वाक्यविन्यास का समर्थन करते हैं, और गतिशील कोड पूर्णता आदि प्रदान करते हैं।

2

NetBeans के बावजूद स्वतः पूर्णता के लिए इसका इस्तेमाल करते हैं यह अक्सर अपने कोड का दस्तावेजीकरण के लिए उपयोगी है:

इस मामले में आप जानते हैं कि इस विधि हो जाता है और क्या यह कोड के अंदर रिटर्न लेकिन आप पता नहीं क्या

हो रहा है है
/** 
* Returns some stuff 
* @param string $someObj 
* @return array 
*/ 
public function someMethod($someObj) { 
    $factoredObj = getObject($someObj); //you are not sure what type it returns 
    $resultArray = $factoredObj->toArray(); 
    return $resultArray; 
} 

आप कोड के अंदर /* @var $variable type */ साथ यह टिप्पणी कर सकते हैं

/** 
* Returns some stuff 
* @param string $someObj 
* @return array 
*/ 
public function someMethod($someObj) { 
    /* @var $factoredObj someType */ 
    $factoredObj = getObject($someObj); 
    $resultArray = $factoredObj->toArray(); 
    return $resultArray; 
} 

या

$factoredObj = getObject($someObj); /* @var $factoredObj someType */ 
7

तुम कहाँ चर एक वर्ग संपत्ति लेकिन सिर्फ एक चर है कि कुछ दिए गए मान रखती है नहीं है मामले में एक चर के प्रकार, की घोषणा का उपयोग एकल स्टार टिप्पणी @var के बाद अपने चर द्वारा पीछा करना चाहते हैं नाम और आखिरकार उस चर के प्रकार के प्रकार के बाद। उदाहरण के लिए:

/* @var $errorMessage NotificationMessage */ 
$errorMessage= $allMessages->rewind()->current(); 

NetBeans या PhpStorm कि $ errorMessage NotificationMessage का एक उदाहरण है बता देंगे, और आप उस चर के लिए कोड पूरा होने मिलना चाहिए।

+1

यह PHPStorm के साथ भी काम करता है। – Buffalo

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