2009-06-10 10 views
16

मैं सोच रहा था कि क्या यह वैश्विक रूप से सभी PHP त्रुटियों को अपवादों में परिवर्तित करने के लिए एक बुरा अभ्यास माना जाता है। निम्नलिखित की तरह कुछ इस्तेमाल किया जाएगा:PHP - सभी त्रुटियों को अपवादों में परिवर्तित करना - अच्छा या बुरा?

function exception_error_handler($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 
    return false; 
} 

मुझे लगता है इस धारणा है कि आप केवल "पकड़ की कोशिश /" कोड है कि सामान्य रूप त्रुटियाँ फेंक के चारों ओर कुछ हिस्से का उपयोग शुरू कर सकते हैं।

यदि यह अच्छा/बुरा मामला नहीं है, तो इस अभ्यास से उत्पन्न होने वाले कुछ गोचस क्या हैं?

उत्तर

8

दुर्भाग्यवश, यह घातक/पार्स/आदि पर काम नहीं करेगा। त्रुटियां ...

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

+0

यह उत्तर कम से कम इस स्वीकृति के समय के रूप में प्रश्न को समझने लगता है। मैं अपने प्रश्नों का उत्तर देने से तुच्छ जानता हूं, लेकिन मैं बाद में वापस आ सकता हूं। –

2

उन चीजों के लिए अपवादों का उपयोग करें जो वास्तव में आपके नियंत्रण से बाहर हैं।

अच्छा:

try { 
    if (fopen('file.txt', 'w') === false) { 
     throw new Exception('File could not be opened for write access.'); 
    } 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

बुरा:

try { 
    if (strlen($_POST['username']) < 5) { 
     throw new Exception('Username too short'); 
    } 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

पहला तरीका अच्छा है, क्योंकि यह तब होता है जब इसके कुछ है कि उपयोगकर्ता या अनुप्रयोग नहीं कर सकते नियंत्रण। यह फ़ाइल खोल नहीं सकता है क्योंकि? कई कारण हो सकते हैं।

दूसरा तरीका ट्रिगर_error का उपयोग करने पर प्रयास/पकड़ का एक अत्यधिक उपयोग है। दूसरा तरीका यूजरनेम सत्यापन के नियमों को नहीं जानते उपयोगकर्ता को नीचे है।

संक्षिप्त उपयोग अपवादों में जब आप अपने परीक्षण को नियंत्रित नहीं कर सकते हैं। याद रखें अपवादों में अधिक ओवरहेड है तो ट्रिगर_एरर भी :)

+1

आमतौर पर ऐसी त्रुटियां होती हैं जिन्हें हम केवल उपयोगकर्ता के लिए प्रदर्शित करना चाहते हैं, और त्रुटियों को लॉग करना चाहिए, जो उपयोगकर्ता को केवल smth दिखाते हैं। इस तरह की "आंतरिक त्रुटि # 123। कृपया, समर्थन से संपर्क करें।"। इस मॉडल में अपवाद वर्गों को इस परिणाम को प्राप्त करने के लिए काफी औपचारिक रूप दिया गया है। तो, पहला उदाहरण लॉग होना चाहिए, लेकिन केवल उपयोगकर्ता के लिए दूसरा और वे यानी होना चाहिए। सिस्टम अपवाद और उपयोगकर्ता अपवाद ... अच्छा, सुनिश्चित नहीं है कि दूसरा एक्सपैपल "ओवरकिल उपयोग" है। – Jet

+0

यह पहले ओवरकिल जैसा प्रतीत नहीं होता है लेकिन फिर आपको प्रदर्शन समस्याओं के बारे में सोचना होगा। अपवाद होने पर हर बार एक ऑब्जेक्ट बनाया जाता है। जबकि वह अपने आप में धीमा नहीं है, यह कहीं भी ट्रिगर_error जैसे कुछ कहने के रूप में तेज़ नहीं है। और दूसरे उदाहरण को पकड़ने की आवश्यकता नहीं है। बस ओवरहेड में जोड़ता है और जब इस तरह का एक पृष्ठ प्रति दिन हजारों हिट प्राप्त करता है, तो प्रदर्शन हानि उल्लेखनीय है :) मैं व्यक्तिगत रूप से प्रयास करने का कभी भी उपयोग नहीं करता क्योंकि मुझे इसके लिए उपयोग नहीं दिखाई देता है। – Ozzy

+6

2013 यहां है। कंप्यूटर संसाधन अब कोई मुद्दा नहीं है।यदि अपवादों का उपयोग करने के खिलाफ आपकी एकमात्र चिंता नई वस्तु है, तो आप शायद गलत प्रोग्रामिंग भाषा का उपयोग कर रहे हैं। – Gajus

1

पिछले कुछ वर्षों में जावा/नेट में कई वर्षों से काम कर रहा है और हाल के वर्षों में अब PHP, यह वास्तव में इन सभी विभिन्न त्रुटि सम्मेलनों को लेकर परेशान है, जबकि अपवाद पैटर्न वास्तव में है सबकुछ के लिए अच्छा - एप्लिकेशन स्तर त्रुटियों, कक्षा त्रुटियों, सिस्टम त्रुटियों से शुरू - कुछ भी।

मैं वास्तव में सभी प्रकार के त्रुटियों के प्रकारों को प्रबंधित करने की कोशिश में बहुत सारे काम का निवेश करता हूं, क्योंकि प्रत्येक लाइब्रेरी/फ़ंक्शंस त्रुटियों को अलग-अलग संभालती है।

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