2011-06-16 14 views
7

में रेथ्रो PHP अपवाद मैं एक विशिष्ट पकड़ ब्लॉक से अधिक सामान्य पकड़ ब्लॉक में अपवाद पारित करने की कोशिश कर रहा हूं। हालांकि यह काम नहीं कर रहा है। जब मैं निम्नलिखित कोशिश करता हूं तो मुझे 500 सर्वर त्रुटि मिलती है। क्या यह भी संभव है?उच्च स्तरीय पकड़ ब्लॉक

मुझे एहसास है कि आसान कामकाज हैं, लेकिन यह कहना सामान्य नहीं है, "अरे, मुझे इस त्रुटि से निपटने की तरह महसूस नहीं होता है, चलिए अधिक सामान्य अपवाद हैंडलर इसका ख्याल रखते हैं!"

try { 
    try { 
     //some soap stuff 
    }  
    catch (SoapFault $sf) { 
     throw new Exception('Soap Fault'); 
    } 
} 
catch (Exception $e) { 
    echo $e->getMessage(); 
} 

हालांकि मैं मानता हूँ कि अपवाद प्रवाह नियंत्रण के लिए नहीं किया जाना चाहिए:

try { 
    //some soap stuff 
} 

catch (SoapFault $sf) { 
    throw new Exception('Soap Fault'); 
} 

catch (Exception $e) { 
    echo $e->getMessage(); 
} 
+0

नहीं, प्रवाह नियंत्रण को संभालने के लिए अपवादों का उपयोग करना सामान्य नहीं है। –

+0

कूल, धन्यवाद! – mrtsherman

+4

शायद लोगों को डाउनवॉटिंग के नियमों की समीक्षा करने की आवश्यकता है। अगर कोई ऐसा कर रहा है तो एक बुरा विचार है तो क्यों समझाओ। यदि यह एक बुरी तरह गठित सवाल है तो डाउनवोट - http://meta.stackexchange.com/questions/33286/downvotes-versus-close-votes-on-questions – mrtsherman

उत्तर

7

तकनीकी तौर पर यह आपके लिए क्या देख रहे है। एक बेहतर तरीका इस तरह होगा:

function show_error($message) { 
    echo "Error: $message\n"; 
} 

try { 
    //some soap stuff 
}  
catch (SoapFault $sf) { 
    show_error('Soap Fault'); 
} 
catch (Exception $e) { 
    show_error($e->getMessage()); 
} 
+2

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

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