पहले एक बनाना चाहिए स्पष्ट है कि एक अपवाद केवल घातक है अगर यह पकड़ा नहीं है। अपवाद को पकड़ना रोकथाम स्क्रिप्ट निष्पादन नहीं करता है। यह केवल प्रयास ब्लॉक में स्टैक फ्रेम को रोकता है और कैच ब्लॉक पर नियंत्रण स्थानांतरित करता है। वहां से आपकी स्क्रिप्ट सामान्य के रूप में निष्पादित जारी रहेगी।
अपवाद को पकड़ने तक यहाँ हम अभी भी सामान्य स्क्रिप्ट निष्पादन को फिर से शुरू करने के बाद अपवाद पकड़ा है ...
try {
echo "Try...\n";
throw new Exception("This is an exception");
} catch(Exception $e) {
echo "Exception caught with message: " . $e->getMessage() . "\n";
}
echo "Script is still running...";
क्या आप चाहते हो सकता है एक exception handler है। अपवाद संचालक का उपयोग करने के लिए इतना है कि आप try
/catch
ब्लॉकों में प्रत्येक अपवाद आप निम्नलिखित कर सकते हैं संभाल करने के लिए नहीं है ...
function myExceptionHandler($e) {
echo "Uncaught exception with message: " , $e->getMessage(), "\n";
}
set_exception_handler('myExceptionHandler'); // Registers the exception handler
throw new Exception("This is Exception 1");
throw new Exception("This is Exception 2");
throw new Exception("This is Exception 3");
echo "The script is still running...";
संपादित करें: आपके सवाल का स्पष्ट करने के बाद मुझे लगता है कि मैं यह लिखा होना चाहिए जो आप चाहते हैं वह अपवाद हैंडलर नहीं है, लेकिन आप वास्तव में अपवादों का उपयोग नहीं करना चाहते हैं। आप जो करने की कोशिश कर रहे हैं उसे अपवादों को फेंकने की आवश्यकता नहीं है। यदि आप जो करना चाहते हैं तो पीडीओ को अपवाद मोड में न डालें, बस उस तरह की त्रुटि को संभालें। अपवाद का उपयोग केवल असाधारण त्रुटियों को संभालने के लिए किया जाना चाहिए। अपवाद का पूरा बिंदु यह सुनिश्चित करना है कि आप अपना वादा रखें। उदाहरण के लिए, यदि आपका कार्य वादा करता है कि यह हमेशा एक पीडीओएसएटेमेंट ऑब्जेक्ट लौटाएगा और ऐसा कोई मामला है जहां यह संभवतः ऐसा नहीं कर सकता है, तो यह अपवाद को फेंकने के लिए समझ में आता है। इससे कॉलर को पता चलता है कि हम उस बिंदु पर पहुंच गए हैं जहां हम हमारे वादे को नहीं रख सकते हैं।
क्या आप चाहते हैं बुनियादी त्रुटि हैंडलिंग है ...
function someCode(){
$pdostmt = $this->prepare($this->sql);
if($pdostmt->execute($this->bind) !== false) {
if(preg_match("/^(" . implode("|", array("select", "describe", "pragma")) . ") /i", $this->sql))
return $pdostmt->fetchAll($this->fetchOption);
elseif(preg_match("/^(" . implode("|", array("delete", "insert", "update")) . ") /i", $this->sql))
return $pdostmt->rowCount();
} else {
return false;
}
}
while (someCode() === false) {
/* Call someCode() until you get what you want */
}
क्या आप ऐसा करने का प्रयास कर सकते हैं जो आप करने का प्रयास करते हैं? शायद यह refactoring मदद मिलेगी। –
कोड, या ऐसा नहीं हुआ। – moonwave99
ए 'try' ब्लॉक में कई कथन शामिल हो सकते हैं। यह पता लगाना संभव है कि किसने अपवाद को ट्रिगर किया लेकिन यह मामूली नहीं है। आप क्या खत्म करने की कोशिश कर रहे हैं? –