2009-02-11 23 views
23

मैं टाइपिंग संकेत जोड़ने के लिए PHP लेखकों की प्रेरणा को समझ नहीं सकता। दिखाई देने से पहले मैं खुशी से रहता था। फिर, जैसा कि इसे PHP 5 में जोड़ा गया था, मैंने हर जगह प्रकार निर्दिष्ट करना शुरू कर दिया। अब मुझे लगता है कि यह एक बुरा विचार है, जहां तक ​​बतख टाइपिंग कक्षाओं के बीच न्यूनतम युग्मन सुनिश्चित करती है, और कोड मॉड्यूलरलाइजेशन और पुन: उपयोग करती है।(कब) मुझे PHP में टाइप संकेत का उपयोग करना चाहिए?

ऐसा लगता है कि टाइप संकेत भाषा को दो बोलियों में विभाजित करते हैं: कुछ लोग स्थिर भाषा शैली में कोड लिखते हैं, संकेतों के साथ, और अन्य अच्छे पुराने गतिशील भाषा मॉडल से चिपके रहते हैं। या यह "सब कुछ या कुछ नहीं" स्थिति है? क्या मुझे उचित रूप से उन दो शैलियों को मिश्रित करना चाहिए?

उत्तर

35

यह गतिशील टाइपिंग बनाम के बारे में स्थिर नहीं रहती, php अभी भी गतिशील है। यह इंटरफेस के लिए अनुबंध के बारे में है। यदि आपको पता है कि फ़ंक्शन को इसके पैरामीटर में से एक के रूप में एक सरणी की आवश्यकता है, तो फ़ंक्शन परिभाषा में इसे ठीक करें। मैं फ़ंक्शन में बाद में त्रुटि करने के बजाय, तेजी से विफल होना पसंद करता हूं।

(यह भी ध्यान रखें कि आप नहीं कर सकते bool, पूर्णांक, स्ट्रिंग, नाव है, जो एक गतिशील संदर्भ में समझ में आता है के लिए इशारा प्रकार निर्दिष्ट करें।)

+2

ठीक है, मैं सहमत हूं। मुझे लगता है कि सख्त अनुबंध किसी भी तरह से प्रारंभिक रूप से बतख-टाइप की गई भाषा के लिए विदेशी हैं। PHP पहले से ही बदसूरत है, और टाइपिंग संकेत यह असंबंधित विशेषताओं के ढेर की तरह दिखता है। –

+4

मुझे पता नहीं, PHP बढ़ रहा है (ओओपी)। जटिल डेटा प्रकारों के लिए सख्त इंटरफेस मुझे समझ में आता है। – Mario

+2

इसके अलावा, आप दोनों दुनिया के सर्वश्रेष्ठ प्राप्त करते हैं, सख्तता को परिभाषित करते हैं जहां यह महत्वपूर्ण है, या नहीं, और छोटी चीजें गतिशील छोड़ दें। – Mario

15

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

+1

ठीक है, PHP में मेरा कोड केवल उन विधियों की उपस्थिति पर निर्भर करता है जिन्हें मैं पास पैरामीटर ऑब्जेक्ट के विरुद्ध कॉल करता हूं। एक निश्चित प्रकार की मांग के साथ खुद को बाध्य क्यों करें? –

+5

उस स्थिति में, अपनी ऑब्जेक्ट के लिए एक इंटरफ़ेस बनाएं, जो इसे कार्यान्वित करेगा, और उस इंटरफ़ेस नाम के साथ अपना फ़ंक्शन संकेत दें। ठोस अनुबंध – Mario

+1

सच है। हमेशा (शायद कुछ मामलों को बचाएं) इंटरफेस के लिए टाइपहिंट - कंक्रीट कक्षाएं नहीं। – troelskn

0

प्रकार के बिना इशारा यह असंभव आईडीई के प्रकार पता करने के लिए के लिए होगा एक विधि पैरामीटर और इस प्रकार उचित इंटेलिजेंस प्रदान करता है - आपके संपादक में इंटेलिजेंस होता है, है ना? ;)। यह कहा जाना चाहिए कि मुझे लगता है कि आईडीई इंटेलिजेंस के लिए इसका इस्तेमाल करते हैं, क्योंकि यह पहला है जिसे मैंने PHP में संकेत देने के संकेत के बारे में सुना है (संकेत बीटीडब्ल्यू के लिए धन्यवाद)।

+2

उस –

+0

के लिए phpdoc एनोटेशन सही है, लेकिन टिप्पणियां कोड नहीं हैं, आमतौर पर;)। – Justin

5

क्या तुमने कभी प्रकार हिंट कर निर्णय लेते हैं तो कम से कम यह ठोस या अमूर्त वर्ग के बजाय इंटरफेस का उपयोग कर। कारण सरल है, PHP एकाधिक विरासत की अनुमति नहीं देता है लेकिन कई इंटरफेस को लागू करने की अनुमति देता है। इसलिए यदि कोई आपकी लाइब्रेरी का उपयोग करने का प्रयास करता है तो उसे आपके इंटरफ़ेस को लागू करने में कठिनाई नहीं होगी, क्योंकि इस मामले के विपरीत जहां उसे अपना सार/ठोस वर्ग का विस्तार करना होगा, क्योंकि वह पहले से ही पहले से ही विस्तार कर चुका है।

10

प्रकार हिंट जोड़ने के लिए PHP समूह की प्रेरणा एक और विशेषता यह है कि मंच, अधिक परिचित आरामदायक, और आकर्षक बनाना होगा साथ जावा शैली OOP करने के लिए इस्तेमाल लोगों प्रदान करना था। यह बदले में, PHP को "उद्यम तैयार" बना देगा, जो ज़ेंड को उनके मुख्य व्यवसाय के साथ मदद करेगा।

एक तरफ विपणन, इसका उपयोग होता है। यदि आप एक विधि लिख रहे हैं जो किसी पैरामीटर पर एक विशिष्ट तरीके से चल रहा है जो पैरामीटर कुछ और था, तो अनपेक्षित (अक्सर चुप) विफलताओं का कारण बनता है, तो प्रकार संकेत देने का उपयोग यह सुनिश्चित करता है कि कोड उत्पादन में तोड़ने के बजाय विकास के दौरान टूट जाएगा।

-2

टाइपिंग संकेत हमारी कंपनी (ज्यादातर जावा लोग इसे) पर बहस का मुद्दा है, और मैं एक बहुत पुराना स्कूल PHP प्रोग्रामर (और अन्य भाषाओं में प्रोग्राम) हूं।

मेरी सलाह प्रकार हिंट करने से बचने के लिए और प्रत्येक जटिल समारोह में ट्राई/कैच संचालकों शामिल करने के लिए है।

प्रकार हिंट कॉल अपवाद संचालन पर्यावरण जो सामान्य बुरा है और untested चला जाता है, प्राथमिक समस्या पर भरोसा करने के लिए एक आवेदन बाध्य करती है। वेब ऐप्स के लिए, इसका परिणाम मौत की सफेद स्क्रीन में होता है, बैच के लिए यह ज्यादातर मामलों में अच्छे संदेशों को लॉग किए बिना केवल घातक निकास में पड़ता है, और आप अपने सिर को स्क्रैच करते हुए उपयोगकर्ता या एप्लिकेशन समस्या को फिर से बनाने की कोशिश कर रहे हैं जो प्रबंधन आपके ऊपर है हल करने के लिए वापस।

स्थानीय अपवाद हैंडलिंग डेटा मानों में डेटा प्रकारों और कचरे में कचरा सहित अधिक नियंत्रित परीक्षण परिदृश्य प्रदान करता है, जो गलत में गुजरकर कॉलर में अपवाद हैंडलिंग पथ का परीक्षण करने में मुश्किल से अधिक पूर्ण परीक्षण सूट देता है अपवाद टाइप करें और उम्मीद करें।

स्टैक संस्करण समस्याओं के कारण अपवाद परीक्षण कई मामलों में भी विफल रहता है (यानी PHP के कुछ संस्करणों को 5.4 "उचित घातक" त्रुटियों को उचित तरीके से नहीं पकड़ते हैं और ergo phpunit बस परीक्षण सूट तोड़ने से मर जाता है। यह एक ढेर है विशिष्ट समस्या, हालांकि मेरे अनुभव प्रकार में संकेत केवल अनावश्यक है, जो लोग टाइप की गई भाषा में उपयोग किए जाते हैं, उन्हें प्रभाव को महसूस किए बिना PHP को बेहतर स्वीकार करते हैं, और अधिक जटिल परीक्षण परिदृश्यों का कारण बनता है (अपवाद पथ परिणामों को संभालने वाले कॉलर्स का परीक्षण करना बहुत मुश्किल होता है)।

जावा और अन्य टाइप की गई भाषा लोग PHP में डिफ़ॉल्ट मिश्रित प्रकार पैरामीटर से लाभ उठाने और लाभ लेने के बारे में स्वीकार नहीं कर रहे हैं या समझ रहे हैं ... वे किसी दिन सीखेंगे लेकिन केवल तभी PHP रास्ता गले लगाओ। ;-)

मजबूत PHP यूनिट आधारित परीक्षण परिदृश्यों को विकसित करते समय सर्वश्रेष्ठ पाठ सीखे जाते हैं, और सामान्य रूप से प्रकाश डालने पर प्रकाश डालने का कारण क्यों होता है, और परीक्षण से संबंधित बट में दर्द क्यों होता है, और अच्छे से ज्यादा समस्या का कारण बनता है ... प्रत्येक के लिए, और मेरे ऐप्स बेहतर और अधिक भरोसेमंद चलते हैं और आम तौर पर स्थानीय कार्यों में पकड़ पथ सहित 100% कोड कवरेज के साथ परीक्षण अधिक पूर्ण हो जाते हैं।

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