2008-09-26 8 views
5

मैं PHP के लिए नया हूं और मैं @ mysql_ping() जैसे @ उपसर्ग के साथ फ़ंक्शन को कॉल करने वाले कुछ उदाहरण देखकर उलझन में हूं।PHP उपनाम @ फ़ंक्शन

इसके लिए क्या है? गुगलिंग/सर्चिंग बहुत मदद नहीं है क्योंकि @ छोड़ दिया जाता है और 'उपनाम' पर्याप्त पर्याप्त कीवर्ड नहीं है।

उत्तर

15

@ त्रुटियों, चेतावनियों और नोटिस को दबाता है।

यदि आप कस्टम error handler या $ php_errormsg चर के उचित चेक के साथ पूरक हैं तो आप इसे अच्छे उद्देश्य के लिए उपयोग कर सकते हैं ताकि आप त्रुटियों को सही तरीके से संभाल सकें।

मेरे अनुभव में, यह उचित उपयोग बहुत अधिक नहीं देखा जाता है और इसके बजाय खराब तरीके से बहुत कुछ उपयोग किया जाता है, केवल उन पर कार्य किए बिना त्रुटियों को छिपाने के लिए। http://www.php.net/manual/en/language.operators.errorcontrol.php

+0

खैर आलसी ... चलो कहते हैं कि यह एक "एक बार चलाने के लिए, फेंक" स्क्रिप्ट के लिए उपयोगी है करते हैं। किसी भी ओवरकेस में, यह एक बुरा अभ्यास है। –

+2

यदि आपके पास अन्यथा कोई त्रुटि हैंडलर है तो त्रुटि नोटिस को दबाने के लिए यह बहुत उपयोगी है। – eyelidlessness

+0

"आमतौर पर आलसी प्रोग्रामर द्वारा उपयोग किया जाता है जो त्रुटि कोड जांचना नहीं चाहते हैं" - पूरी तरह से गलत। @ वास्तव में PHP कैसे "कोशिश/पकड़" करता है http://www.php.net/manual/en/language.operators.errorcontrol.php – Havenard

2

"प्रतीक पर PHP" के लिए गुगलिंग से पता चलता है कि यह PHP को किसी भी त्रुटि संदेश प्रदर्शित करने के लिए कहता है जो कॉल का कारण बनता है।

3

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

mysql_connect जैसे कार्य संसाधन संसाधन पहचानकर्ता, या त्रुटियों पर FALSE लौटाते हैं। @mysql_connect (...) का उपयोग करें और वापसी मूल्य की जांच करें।

0

किसी प्रतीक के साथ फ़ंक्शन को उपसर्ग करना बंद होने पर PHP त्रुटि हैंडलर को ट्रिगर करना बंद कर देता है। ध्यान रखें कि यदि आप इसका उपयोग करने का निर्णय लेते हैं तो आपको स्वयं को संभालने वाली सभी त्रुटियों को करना होगा।

$test = @file_get_contents('nonexistant.file'); 
if(!$test) 
{ 
    die('Failed'); 
} 

एक बेहतर अभ्यास display_errors बंद कर देते हैं और कस्टम त्रुटि संचालकों (Error Exception देखें) का प्रयोग है।

1

यह किसी भी त्रुटि को दबाता है जो अन्यथा आउटपुट हो सकता है।

यह दर्द और कठिनाई के लिए एक नुस्खा है, क्योंकि यह अनिवार्य रूप से कठिनाइयों का कारण बनता है जब कोई त्रुटि होती है, तो आप कारण को ट्रैक करने में घंटों खर्च करने के लिए बाध्य हैं। अगर @ ऑपरेटर का उपयोग नहीं किया गया था, तो त्रुटि सेकंड में पाई गई होगी।

इसका उपयोग करने के लिए कोई अच्छा कारण नहीं है, लाइव साइट पर प्रदर्शित होने से त्रुटियों को रोकने के लिए display_errors और error_log ini सेटिंग्स का उपयोग करें, और उन्हें अपनी dev साइट पर दिखाया जाए।

यदि कोई त्रुटि है जिसे आप देखना नहीं चाहते हैं, तो आप इसे दबाने से ठीक करने से बेहतर हैं!

यदि यह बाहरी lib में और आपके नियंत्रण से बाहर है, तो बस इसे लॉग पर लिखें, उत्पादन पर display_errors बंद करें, और इसके साथ रहें। क्योंकि इसमें कोई फर्क नहीं पड़ता है कि अब आप जिस त्रुटि को दबा रहे हैं और साथ रहने के लिए खुश हैं, वैसे ही वहां से फेंकने वाली त्रुटि होगी।

@ === खराब

0

कभी कभी यह useful- है, खासकर अगर व्यवस्थापक आप php पर्यावरण के साथ खेलने के लिए नहीं चाहता है या मूल्य महत्वपूर्ण नहीं है और मुख्य रूप से कॉस्मेटिक है।याद रखें, यद्यपि; यह एक कामकाज है, एक पैनसिया नहीं।

[...]

.$foutDate = @filemtime($keyring); /* Don't care, as we've already established file */ 

$f["date"] = $foutDate; 

$f["fullDate"] = date("r", $foutDate); 

[...]