2011-01-11 10 views
22

निम्नलिखित कोड में '@' प्रतीक क्या करता है?PHP में '@' उपसर्ग क्या करता है?

@mkdir(ROOT. "cache/"); 
+3

PHP मैनुअल वास्तव में खोजना बहुत आसान है ... [php.net/@](http://php.net/@);) – netcoder

+12

निश्चित रूप से। "@" या "@ उपसर्ग" के लिए PHP साइट खोजने का प्रयास करें - आपको एक लंबा रास्ता मिल जाता है। नहीं। –

+3

"[यह ऑपरेटर स्नेफ ऑपरेटर के रूप में अनुभवी phpers द्वारा स्नेही रूप से जाना जाता है।] (Http://php.net/manual/en/language.operators.errorcontrol.php#112900)" ;-) –

उत्तर

36

It suppresses errors from displaying:

पीएचपी एक त्रुटि नियंत्रण ऑपरेटर का समर्थन करता है: चिह्न (@) पर। PHP में एक अभिव्यक्ति के लिए तैयार होने पर, उस अभिव्यक्ति द्वारा उत्पन्न किए जा सकने वाले किसी भी त्रुटि संदेश को अनदेखा कर दिया जाएगा।

यदि track_errors सुविधा सक्षम है, तो अभिव्यक्ति द्वारा उत्पन्न कोई त्रुटि संदेश परिवर्तनीय $ php_errormsg में सहेजा जाएगा। यह चर प्रत्येक त्रुटि पर ओवरराइट किया जाएगा, इसलिए यदि आप इसका उपयोग करना चाहते हैं तो जल्दी से जांचें।

टिप्पणियों में उल्लेख के अनुसार, मैं भी वास्तव में इस कार्यक्षमता का उपयोग करने का एक कारण कल्पना नहीं कर सकता - कोड लिखना जो त्रुटि राज्यों/शर्तों के साथ उचित रूप से संबंधित है।

+11

मैं यह भी जोड़ूंगा: "यूपी का उपयोग करते समय लगभग कोई भी मामला नहीं है" – zerkms

+0

@zerkms: वास्तव में, मैं सहमत हूं। तो जोड़ा। –

+1

मुझे इसे शुद्ध बुराई के रूप में संदर्भित करना पसंद है। – GWW

8

जैसा कि बताया गया है, यह त्रुटि दमन ऑपरेटर है।

लेकिन क्या नहीं बताया गया है, यह है कि यह उपयोग करने के लिए बहुत बुरा अभ्यास है - त्रुटियों को चुपचाप विफल नहीं होना चाहिए।

त्रुटि रिटर्न के लिए जांचें, और कोशिश/पकड़ ब्लॉक का उपयोग करें जहां अपवादों का उपयोग किया जा रहा है।

विशिष्ट उदाहरण में ...

@mkdir(ROOT. "cache/"); 

... यह mkdir() से किसी भी त्रुटि पर ध्यान नहीं देता। docs कहना है कि वह FALSE विफलता पर देता है, तो आप क्या करना चाहिए ...

if (! mkdir(ROOT. "cache/")) { 
    // Handle error. 
} 
3

लोग, हाल ही में किया गया है यह परिपक्व और परिष्कृत करने की कोशिश करने के लिए भूल जाते हैं कि PHP काम करवाने के लिए एक त्वरित गंदा भाषा थी लगते हैं ।

त्रुटि दमन कार्य करने का एक त्वरित और गंदा तरीका है जिस तरह से आपको उनकी आवश्यकता होती है, क्योंकि वेब-विकास में आप भविष्यवाणी नहीं कर सकते कि आपको क्या फेंक दिया जाएगा, और कभी-कभी यह देखभाल करने योग्य नहीं है!

एक क्लासिक उदाहरण उपयोगी फ़ंक्शन getimagesize है, जो आपको किसी छवि के बारे में कुछ जानकारी प्राप्त करने की अनुमति देता है जिसे किसी ने अपलोड किया है। यह फ़ंक्शन एक wobbly chucks अगर छवि फ़ाइल एक मानक छवि फ़ाइल नहीं है। यह वास्तव में एक फाइल का निरीक्षण करने के लिए डेवलपर्स की भूमिका नहीं है, यह निर्धारित करें कि इसे getimagesize में लोड किया जा सकता है या नहीं। ऐसा करने के सुरुचिपूर्ण तरीके हो सकते हैं, लेकिन गंभीरता से मुझे परवाह नहीं है!

सिर्फ इस कार्य करें:

if(!($a = @getimagesize( $_FILE['file']['tmp_name']))) 
{ 
    unlink($_FILE['file']['tmp_name']); 

    //politely tell user that you rejected their image! 
} 

हां, तो आप कोशिश करते हैं और पकड़ बयान जो अधिक सुंदर हैं, लेकिन अंत में, आपको त्रुटि पकड़ लिया और त्रुटि संदेश है, जो आप चाहते थे दबा दिया इस्तेमाल कर सकते हैं टैब-कुंजी पहने बिना!

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

+0

PHP नोटिस के साथ, मुझे लगता है कि @ suppressor बहुत उपयोगी हो जाता है, यानी: अगर (@ $ _ POST ['submit'] == 'send') {} –

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