PHP में @ सिंबल (एरर कंट्रोल ऑपरेटर)
PHP **एरर कंट्रोल ऑपरेटर** यानी एट साइन (@**) का समर्थन करता है। जब @ को किसी एक्सप्रेशन से पहले लगाया जाता है, तो उस एक्सप्रेशन द्वारा उत्पन्न होने वाली कोई भी त्रुटि संदेश (नोटिस, वार्निंग, फैटल एरर नहीं) **नजरअंदाज** कर दिए जाते हैं।
उदाहरण 1: फाइल ऑपरेशन पर त्रुटि दबाना
<?php
$file = @file('non_existent_file') or
die("फाइल खोलने में विफल: त्रुटि संदेश = '$err'");
$value = @$cache[$key];
?>
आउटपुट
फाइल खोलने में विफल: त्रुटि संदेश = '' PHP Notice: Undefined variable: err in ... on line 4
उदाहरण 2: अपरिभाषित एरे इंडेक्स
<?php
// बिना @ - नोटिस उत्पन्न करता है
$val = $test['5'];
// साथ @ - नोटिस दबाया गया
$val = @$test['5'];
?>
महत्वपूर्ण चेतावनियाँ
- फैटल एरर्स नहीं पकड़े जाते: @ पार्स एरर्स, फैटल एरर्स, या E_ERROR को नहीं रोकता।
- प्रदर्शन प्रभाव: @ प्रत्येक उपयोग पर आंतरिक एरर हैंडलर को कॉल करता है - तंग लूप्स में उपयोग न करें।
- डीबगिंग कठिन: चुपचाप त्रुटियों को छुपाता है, बग्स खोजना मुश्किल बनाता है।
- कस्टम एरर हैंडलर: यदि कस्टम एरर हैंडलर सेट है (`set_error_handler`), तो यह अभी भी कॉल किया जाता है, लेकिन `error_reporting()` 0 लौटाएगा।
सर्वोत्तम प्रथाएं
- कम से कम उपयोग करें - केवल उन ऑपरेशन्स के लिए जहां त्रुटि अपेक्षित और हानिरहित है (जैसे वैकल्पिक फ़ाइल पढ़ना, कैश लुकअप)।
- बेहतर विकल्प:
isset($arr['key'])याarray_key_exists()एरे इंडेक्स के लिए।file_exists()याis_readable()फाइल ऑपरेशन्स से पहले।- उचित त्रुटि हैंडलिंग के साथ
try/catch(थ्रोएबल्स के लिए)।
- कभी भी @ का उपयोग न करें डेटाबेस क्वेरीज़, API कॉल्स, या महत्वपूर्ण ऑपरेशन्स पर।