PHP में अपवाद फेंकना कैच ब्लॉक का प्रयास करें




exception-handling drupal-6 (4)

मेरे पास Drupal 6। मॉड्यूल फ़ाइल में एक PHP फ़ंक्शन है। मैं अधिक गहन कार्यों (जैसे डेटाबेस प्रश्न) निष्पादित करने से पहले आरंभिक चर मान्यताओं को चलाने का प्रयास कर रहा हूं। सी # में, मैं अपने प्रयास ब्लॉक की शुरुआत में आईएफ स्टेटमेंट्स को लागू करता था, जो सत्यापन विफल होने पर नए अपवाद फेंक देते थे। फेंक दिया अपवाद कैच ब्लॉक में पकड़ा जाएगा। निम्नलिखित मेरा PHP कोड है:

function _modulename_getData($field, $table) {
  try {
    if (empty($field)) {
      throw new Exception("The field is undefined."); 
    }
    // rest of code here...
  }
  catch (Exception $e) {
    throw $e->getMessage();
  }
}

हालांकि, जब मैं कोड चलाने की कोशिश करता हूं, तो यह मुझे बता रहा है कि वस्तुओं को केवल कैच ब्लॉक के भीतर फेंक दिया जा सकता है।

अग्रिम में धन्यवाद!


function _modulename_getData($field, $table) {
  try {
    if (empty($field)) {
      throw new Exception("The field is undefined."); 
    }
    // rest of code here...
  }
  catch (Exception $e) {
    /*
        Here you can either echo the exception message like: 
        echo $e->getMessage(); 

        Or you can throw the Exception Object $e like:
        throw $e;
    */
  }
}

फिर से करने के लिए

 throw $e;

संदेश नहीं


throw $e->getMessage();

आप एक string फेंकने की कोशिश करते हैं

एक sidenote के रूप में: अपवाद आमतौर पर आवेदन के असाधारण राज्यों को परिभाषित करने के लिए हैं, सत्यापन के बाद त्रुटि संदेशों के लिए नहीं। यह एक अपवाद नहीं है, जब कोई उपयोगकर्ता आपको अमान्य डेटा देता है


बस पकड़ ब्लॉक से throw को हटा दें - इसे एक echo बदलें या अन्यथा त्रुटि को संभाल लें।

यह आपको नहीं बता रहा है कि वस्तुओं को केवल पकड़ ब्लॉक में फेंक दिया जा सकता है, यह आपको बता रहा है कि केवल वस्तुओं को फेंक दिया जा सकता है, और त्रुटि का स्थान कैच ब्लॉक में है - एक अंतर है।

कैच ब्लॉक में आप जो कुछ भी पकड़ा है उसे फेंकने की कोशिश कर रहे हैं - जो इस संदर्भ में वैसे भी कम समझ में आता है - और जिस चीज को आप फेंकने की कोशिश कर रहे हैं वह एक स्ट्रिंग है।

आप जो कर रहे हैं उसका असली दुनिया सादृश्य एक गेंद पकड़ रहा है, फिर कहीं और निर्माता के लोगो को फेंकने की कोशिश कर रहा है। आप ऑब्जेक्ट की संपत्ति नहीं, केवल एक संपूर्ण वस्तु फेंक सकते हैं।





try-catch