2012-09-11 11 views
11
try  
{ 
    $matrix = Query::take("SELECT moo"); //this makes 0 sense 

    while($row = mysqli_fetch_array($matrix, MYSQL_BOTH)) //and thus this line should be an error 
    { 

    } 

    return 'something'; 
} 
catch(Exception $e) 
{ 
    return 'nothing'; 
} 

काम नहीं कर रहा। मैं php में अपवादों का उपयोग करने के लिए कभी नहीं आया हूं, लेकिन उन्हें सी # में बहुत उपयोग किया जाता है और यह PHP में लगता है कि वे अलग-अलग काम कर रहे हैं या हमेशा के रूप में, मुझे कुछ स्पष्ट याद आ रहा है।पीएचपी कोशिश पकड़ सिर्फ भाग को पकड़ने के लिए जा रहा है और <code>nothing</code> लौटने यह लाइन <code>while</code> के साथ शुरू में एक चेतावनी <code>Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given</code> से पता चलता की हालांकि बजाय

+0

यहां कुछ प्रश्न हैं: http://stackoverflow.com/questions/1241728/can-i-try-catch-a-warning –

+0

डुप्लिकेट: http://stackoverflow.com/questions/1241728/can- i-try-catch-a-चेतावनी – wesside

+0

इसे पढ़ें http://phpmaster.com/error-handling-in-php/ – vascowhite

उत्तर

18

आप कोशिश-पकड़ ब्लॉक के साथ चेतावनी/त्रुटियों को संभाल नहीं सकते हैं, क्योंकि वे अपवाद नहीं हैं। अगर आप चेतावनियां/त्रुटियों को संभालना चाहते हैं, तो आपको set_error_handler के साथ अपना स्वयं का त्रुटि हैंडलर पंजीकृत करना होगा।

लेकिन इस समस्या को ठीक करना बेहतर है, क्योंकि आप इसे रोक सकते हैं।

+0

इस उत्तर पर बिल्डिंग, आप आसानी से PHP त्रुटियों को कैप्चर करने और अपवाद जारी करने के लिए set_error_handler सेट कर सकते हैं, जिस बिंदु पर आपका प्रयास-पकड़ काम करेगा। मुझे यकीन है कि आप कुछ उपयुक्त के लिए Google कर सकते हैं। –

+0

अपवादों को फेंकने के लिए, set_error_handler को त्रुटि अपवाद (विशेष रूप से इस उपयोग के लिए अंतर्निहित कक्षा) के संयोजन में उपयोग किया जाना चाहिए। –

+0

मैं अब कुछ वर्षों से PHP पूर्णकालिक कर रहा हूं, और मुझे यह भी पता नहीं था। –

6

PHP में एक चेतावनी अपवाद नहीं है। आमतौर पर सबसे अच्छा अभ्यास यह सुनिश्चित करने के लिए रक्षात्मक कोडिंग का उपयोग करना होगा कि परिणाम वह है जिसे आप उम्मीद करते हैं।

3

Welp, दुर्भाग्य से यह PHP के बारे में मुद्दा है। प्रयास/पकड़ने के बयान अपवादों को पकड़ लेंगे, लेकिन जो भी आप प्राप्त कर रहे हैं वह पुरानी-स्कूल PHP त्रुटि है।

आप के साथ इस तरह एक त्रुटि को पकड़ने के लिए होगा: http://php.net/manual/en/function.set-error-handler.php

या तो उस या यदि $ मैट्रिक्स एक mysqli_result वस्तु mysqli_fetch_array प्रदर्शन से पहले है देखने के लिए जाँच।

+0

पुराने स्कूल PHP त्रुटि प्रबंधन मेरे लिए काम किया। मुझे सही दिशा में इंगित करने के लिए धन्यवाद! – Clomp

1

PHP एक चेतावनी उत्पन्न कर रहा है, अपवाद नहीं। चेतावनी नहीं पकड़ी जा सकती है। वे सी # में कंपाइलर चेतावनियों की तरह अधिक हैं।

0

अपवाद केवल थ्रोबल का उप-वर्ग है। BTW

try { 

    catch (\Exception $e) { 
     //do something when exception is thrown 
} 
catch (\Error $e) { 
    //do something when error is thrown 
} 

या अधिक समावेशी समाधान

try { 

catch (\Exception $e) { 
    //do something when exception is thrown 
} 
catch (\Throwable $e) { 
    //do something when Throwable is thrown 
} 

: त्रुटि को पकड़ने के लिए आप निम्न में से एक करने की कोशिश कर सकते हैं जावा समान व्यवहार है।