2013-06-25 3 views
17

इन दो उदाहरणोंPHP में 'अंततः' कीवर्ड क्या है?

<?php 
function throw_exception() { 
    // Arbitrary code here 
    throw new Exception('Hello, Joe!'); 
} 

function some_code() { 
    // Arbitrary code here 
} 

try { 
    throw_exception(); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

some_code(); 

// More arbitrary code 
?> 

और

<?php 
function throw_exception() { 
    // Arbitrary code here 
    throw new Exception('Hello, Joe!'); 
} 

function some_code() { 
    // Arbitrary code here 
} 

try { 
    throw_exception(); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} finally { 
    some_code(); 
} 

// More arbitrary code 
?> 

अंतर क्या है पर विचार करें? क्या ऐसी कोई स्थिति है जहां पहला उदाहरण some_code() निष्पादित नहीं करेगा, लेकिन दूसरा होगा? क्या मैं पूरी तरह से बिंदु खो रहा हूँ? से

+4

'कोड के भीतर अंत में ब्लॉक हमेशा की तरह, ट्राई एवं कैच ब्लॉक के बाद निष्पादित किया जाएगा कि क्या एक अपवाद फेंका कर दिया गया है की परवाह किए बिना, और इससे पहले सामान्य निष्पादन –

+0

resumes.' मैं इस इस धागे पर संबंधित है लगता है: http://stackoverflow.com/questions/15031515/can-i-use-try-catch-finally-like- यह – JunM

+0

बस किसी और को PHP मैनुअल से कॉपी-पेस्टिंग सहेजने के लिए, मैंने इसे पढ़ा है लेकिन नहीं इन दो उदाहरणों के बीच अंतर को समझें, अन्यथा मैंने सवाल नहीं पूछा होगा। – marxjohnson

उत्तर

37

हैं आप अपवाद (कोई अपवाद) पकड़ते हैं, दो कोड नमूने बराबर हैं। लेकिन अगर आप केवल अपने क्लास ब्लॉक में कुछ विशिष्ट अपवाद प्रकार को संभालते हैं और एक अन्य प्रकार का अपवाद होता है, तो some_code(); केवल तभी निष्पादित किया जाएगा यदि आपके पास finally ब्लॉक है।

try { 
    throw_exception(); 
} catch (ExceptionTypeA $e) { 
    echo $e->getMessage(); 
} 

some_code(); // Will not execute if throw_exception throws an ExceptionTypeB 

लेकिन:

try { 
    throw_exception(); 
} catch (ExceptionTypeA $e) { 
    echo $e->getMessage(); 
} finally { 
    some_code(); // Will be execute even if throw_exception throws an ExceptionTypeB 
} 
+1

एक विशिष्ट उदाहरण का हवाला देते हुए +1 के लायक होने पर 'some_code() 'निष्पादित नहीं किया जाएगा –

+0

बहुत स्पष्ट और सहायक ... –

+0

मैंने थोड़ी देर बिताई है कि वे क्यों उपयोगी हैं, और अंत में (कोई इरादा नहीं है) आपका उत्तर आखिरकार ब्लॉक की आवश्यकता के लिए एक वैध तर्क देता है। –

-1

http://www.youtube.com/watch?v=EWj60p8esD0

घड़ी: 12:30 के बाद

यह वीडियो देखें। हालांकि भाषा जावा है। लेकिन मुझे लगता है कि यह अपवादों और का उपयोग अंततः कीवर्ड का उपयोग करता है।

+0

पर उपलब्ध है धन्यवाद सोडन, जो बताता है कि मुझे पहले से क्या पता है, यानी यह परवाह किए बिना क्या कोई अपवाद है। लेकिन ब्लॉक के बाद कोड रखा गया है, है ना? क्या ब्लॉक के हिस्से के रूप में इसे रखने का कोई विशिष्ट फायदा है? – marxjohnson

+0

इस बात पर निर्भर करता है कि आप उपयोगकर्ता से अपवाद को कितना चाहते हैं। आम तौर पर अंततः एक दुर्लभता का उपयोग कर बोलना। – sodhancha

0

fianlly ब्लॉक किया जाता है जब आप में से है कि क्या एक अपवाद घटित हो या नहीं पर अमल करने कोड का एक टुकड़ा चाहते हैं ...

इस पृष्ठ पर बाहर उदाहरण 2 की जांच:

PHP manual

0

अंत में भले ही कोई अपवाद नहीं पकड़े गए थे ट्रिगर किया जाएगा।

क्यों देखने के लिए इस कोड का प्रयास करें:

<?php 
class Exep1 extends Exception {} 
class Exep2 extends Exception {} 

try { 
    echo 'try '; 
    throw new Exep1(); 
} catch (Exep2 $e) 
{ 
    echo ' catch '; 
} finally { 
    echo ' finally '; 
} 

echo 'aftermath'; 

?> 

उत्पादन

try finally 
Fatal error: Uncaught exception 'Exep1' in /tmp/execpad-70360fffa35e/source-70360fffa35e:7 
Stack trace: 
#0 {main} 
    thrown in /tmp/execpad-70360fffa35e/source-70360fffa35e on line 7 

यहाँ हो जाएगा आप के लिए बेला है। https://eval.in/933947

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