2011-09-20 5 views
7

मैं अपने मापदंडों के प्रकार की जाँच जब कार्यों को लिखा करते करते थे। क्या इसके खिलाफ या इसके लिए कोई कारण है? उदाहरण के तौर पर, क्या इस कोड में स्ट्रिंग सत्यापन को रखने या इसे हटाने के लिए अच्छा अभ्यास होगा, और क्यों?क्या आप PHP कार्यों में पैरामीटर प्रकारों को सत्यापित करना चाहिए?

function rmstr($string, $remove) { 
    if (is_string($string) && is_string($remove)) { 
     return str_replace($remove, '', $string); 
    } 
    return ''; 
} 

rmstr('some text', 'text'); 

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

+8

यह जब तक आप एक API पुस्तकालय बना रहे हैं या उपयोगकर्ता से इनपुट से निपटने अत्यधिक है। – thedaian

+0

मैं लगा प्रदर्शन का एक क्रमिक क्षय हर कार्य आप लिखते हैं ऐसा किया तो हो सकता है, खासकर अगर वे आंतरिक/निजी कार्यों कि केवल आप ही कहते हैं। –

+0

मुझे लगता है कि यह इस बात पर निर्भर करता है कि क्या होगा यदि आपके पास परीक्षण नहीं था और यह असफल रहा। – Steve

उत्तर

5

मेरे राय है कि आप इस तरह के सत्यापन प्रदर्शन करना चाहिए अगर आप उपयोगकर्ता से इनपुट स्वीकार कर रहे हैं है। यदि उन तारों को उपयोगकर्ता से स्वीकार नहीं किया गया था या उपयोगकर्ता से इनपुट को स्वच्छ कर दिया गया है, तो सत्यापन करना अत्यधिक है।

+0

मैं आपसे सहमत हूँ, मैं उन व्यक्ति कि चेक हर बार (मैं हमेशा कीड़ों का डर लग रहा है) कर में से एक हूँ। लेकिन आम तौर पर यह अराजकता का कारण बनता है। मैं वास्तव में आपके चेक को सीमित करने का सुझाव देता हूं। –

+2

आपको बताने के लिए, उपयोगकर्ता से आने वाले सभी डेटा में केवल एक ही प्रकार है - स्ट्रिंग। तो, टाइपिंग पूरी तरह से टाइप करें ** बेकार ** –

+0

यह एक अच्छा बिंदु @ Col.Shrapnel है, मुझे लगता है कि उपयोगकर्ता इनपुट से प्रकारों को थोड़ा अनावश्यक बनाता है, जब तक कि आप फ़ंक्शन के उपयोगकर्ताओं को सीधे अपने कोड में कॉल करने की अपेक्षा न करें एक फॉर्म से पारित होने की तुलना में। –

6

हाँ, यह ठीक है। हालांकि, PHP को दृढ़ता से टाइप करने के लिए टाइप नहीं किया गया है, इसलिए मुझे लगता है कि यह अभ्यास में बहुत उपयोगी नहीं है।

साथ ही, यदि एक स्ट्रिंग के अलावा किसी अन्य वस्तु का उपयोग करता है, एक अपवाद एक अधिक सूचनात्मक है; इसलिए, मैं अंत में एक खाली स्ट्रिंग को वापस करने से बचने की कोशिश करता हूं, क्योंकि यह अर्थपूर्ण रूप से समझा नहीं रहा है कि rmstr (array, object) को कॉल करना एक खाली स्ट्रिंग देता है।

+0

हाँ, आम तौर पर मैं गलत लौट जहां भी संभव हो इस तरह के एक छोटे से समारोह में एक अपवाद की भूमि के ऊपर से बचने के लिए उपयोग करते हैं, लेकिन यहाँ मैं मान लिया है कि उपयोगकर्ता कोई बात नहीं क्या उनके इनपुट rmstr से एक स्ट्रिंग उम्मीद करेंगे। –

+0

@Aram कुछ भी गलत लौटने के साथ गलत नहीं है। इसे भी खाली में परिवर्तित कर दिया जाएगा –

1

ऐसा लगता है कि स्थानीय लोगों को इस प्रश्न को "पैरामीटर सत्यापित करना चाहिए" के रूप में समझा जाता है, जहां "क्या आप पैरामीटर प्रकार टाइप करना चाहिए", और इसके बारे में बकवास जवाब और टिप्पणियां की गईं।

व्यक्तिगत तौर पर मैं कभी नहीं संकार्य प्रकार जाँच कर रहा हूँ और इसके बारे में कोई परेशानी अनुभवी कभी नहीं।

2

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

नोट: यदि आप जानकारी है, जो प्रकार phpdoc

0

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

यदि यह उत्पादन में इस्तेमाल के लिए नहीं है और आप आप कुछ भी ध्यान न दें और कचरा-इन-कचरा बाहर सिद्धांत (या तीन गंदगी सिद्धांत का पालन कर सकते हैं, रक्षा कोड करने के लिए की जरूरत नहीं है: कोड गंदगी, प्रक्रिया गंदगी, गंदगी मिल)।

अंत यह सभी अपेक्षाओं से मेल खाते के बारे में है में: आप ठीक ढंग से काम करने के लिए अपने कार्य की जरूरत नहीं है, तो आप इसे ठीक से कोड करने के लिए जरूरत नहीं है। यदि आप वास्तव में ठीक से काम करने के लिए अपने कोड पर भरोसा कर रहे हैं, तो आपको प्रत्येक यूनिट (फ़ंक्शन, क्लास) के इनपुट इनपुट को भी सत्यापित करने की आवश्यकता है।

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