2010-12-28 20 views
14

यदि कोई निश्चित स्थिति पूरी हो जाती है तो मैं if ब्लॉक से कैसे बाहर निकल सकता हूं?PHP - IF ब्लॉक से बाहर निकलें

मैं break का उपयोग कर की कोशिश की लेकिन यह काम नहीं करता:

if($bla): 
    $bla = get_bla(); 
    if(empty($bla)) break; 
    do($bla); 
endif; 

यह कहते हैं: गंभीर त्रुटि: नहीं तोड़ सकता है/में ...

+2

अधिक राय के लिए http://stackoverflow.com/questions/7468836/any-way-to-break-if-statement-in-php जांचें ( – AgelessEssence

उत्तर

9

क्यों न सिर्फ इसे चालू करें।

if($bla): 
    $bla = get_bla(); 
    if(!empty($bla)) { 
    do($bla); 
    } 
endif; 

इस तरह यह केवल आपके कोड चलेंगे अगर $ bla खाली नहीं है .. यही कारण है कि अगर-बयान

+15

आपका उत्तर समस्या हल करता है लेकिन ' प्रश्न का उत्तर दें, "अगर मैं ब्लॉक करता हूं तो मैं कैसे बाहर निकल सकता हूं", यह ध्यान देने योग्य है कि यह संभव है या नहीं। – rahmanisback

+1

@rahmanisback जैसा कि आप कहते हैं, यह समस्या हल करता है इसलिए मुझे नहीं लगता कि मेरे उत्तर में क्या गलत है । यदि आप सिर्फ एक जवाब देखते हैं तो आप देखेंगे कि प्रश्न का उत्तर दिया गया है। जब मैंने अपना जवाब पोस्ट किया, तो पहले से ही कई पोस्ट इसका जवाब दे रहे थे, इसलिए मैंने जो किया वह वास्तविक समाधान प्रदान करता था। यदि आप कोई कथन नहीं तोड़ सकते हैं और यदि आपको कभी ऐसा करने की ज़रूरत है तो आप इसे गलत इस्तेमाल कर रहे हैं। – Sondre

+0

यह मेरी समस्या हल हो गया! मैं वही काम कर रहा था, जब मैं पुनर्व्यवस्थित हो सकता था बाहर निकलने की कोशिश कर रहा था। मैं वास्तव में प्रश्न का उत्तर देने में योग्यता देखता हूं, लेकिन यदि प्रश्न एक अनुचित विधि का उपयोग कर रहा है या व्यावहारिक नहीं है, तो यह ध्यान दिया जाना चाहिए। धन्यवाद! –

12

1 स्तर के लिए जारी आप बयान करता है, तो नहीं तोड़ सकते हैं, केवल लूप्स के लिए या थोड़ी देर के लिए।

यदि यह किसी फ़ंक्शन में है, तो 'वापसी' का उपयोग करें।

2

आप नहीं कर सकते।

आप पूरी चीज को उस फ़ंक्शन में डाल सकते हैं जिससे आप return कर सकते हैं।

अन्यथा, आपको तर्क बदलना होगा और ब्लॉक अगर कोई अन्य शामिल करना होगा।

if($bla): 
    $bla = get_bla(); 
    if(!empty($bla)): 
    do($bla); 
    endif; 
endif; 
37

पीएचपी 5.3 में आप goto

if($bla): 
    $bla = get_bla(); 
    if(empty($bla)) goto end; 
    do($bla); 
endif; 
end: 

उपयोग कर सकते हैं लेकिन व्यक्तिगत रूप से मुझे लगता है कि एक बदसूरत समाधान है।

+6

बदसूरत क्यों? यह निश्चित रूप से कुछ स्थितियों में उपयोगी होगा। वोट दें! – rahmanisback

+23

पत्थर की उम्र – max4ever

+0

के बाद से GOTO को अच्छे प्रोग्रामिंग में "प्रतिबंधित" किया गया है, क्या मैं पूछ सकता हूं कि पीएचपी के पीछे लोगों ने 200 9 में इसे क्यों पेश किया था? वे इसे बिल्कुल पेश नहीं कर सकते थे। मैं मानता हूं कि यह बहुत डॉस जैसा लगता है मेरे लिए (अच्छे तरीके से नहीं), लेकिन यह सुनिश्चित करने के लिए आसान हो सकता है। – Thomas

3

मेरा मानना ​​है कि नहीं कर सकते किसी ने अभी तक इस समाधान पोस्ट है (यह लिखित रूप में के साथ थोड़े बात है मेरी पीएचपी शैली):

if($bla){do{ 
    $bla = get_bla(); 
    if(empty($bla)) break; 
    do($bla); 
}while(false);} 

जटिलता अभी भी हे (1)

+0

वाह। लेकिन यह अभी भी पूरी तरह से विकृत है ... हमारे पास हमारे निपटारे में है, हम भी शामिल() का उपयोग कर सकते हैं और वहां से वापस आ सकते हैं, लेकिन हम सिर्फ ब्लॉक को छोड़ नहीं सकते हैं ... – Marki

2

मेरे लिए यह अगर आप एक statemen यदि होने से परहेज नहीं करते बचने मार्कर मामले में कोड ब्लॉकों के बीच से बाहर निकलने की जरूरत है के लिए मदद करता है एक दूसरे में टी।

$exit = FALSE; 

if(!$exit){ 
    if($data["param1"] == cond1){ 
     //do something and continue 
    } 
    else{ 
     //do something 
     $exit = TRUE; 
    } 
} 

if(!$exit){ 
    if($data["param2"] == cond2){ 
     //do something and continue 
    } 
    else{ 
     //do something 
     $exit = TRUE; 
    } 
} 

{...} 

आप प्रत्येक ब्लॉक के आसपास सशर्त बयान रखने रखने, तो यह आपको सही करने के लिए $ बाहर निकलने के सेट करने के बाद किसी अन्य ब्लॉकों पर अमल नहीं होंगे। आप परिवर्तनीय $ जारी रख सकते हैं और इसकी भूमिकाओं को वापस कर सकते हैं यदि इससे आपको अधिक समझदारी मिलती है।

यदि आपके पास कोई और कथन नहीं है तो यह आसान काम करता है।

$exit = FALSE; 

if($bla): 
    $bla = get_bla(); 
    if(empty($bla)) $exit = TRUE; 
    if(!$exit)do($bla); 
endif; 
0

सच पूछिये तो, हम if -block समय से पहले नहीं छोड़ सकते, लेकिन कभी कभी यह वास्तव में आवश्यक है। break केवल लूप के अंदर और switch -block का उपयोग किया जा सकता है। लेकिन हम एक लूप में if रख सकते हैं। तो, मार्कोस फर्नांडीज रामोस का जवाब शायद सबसे उपयुक्त है। यहां बस थोड़ा अच्छा संस्करण है।

do if() 
{ 
    ... 
    if() break; 
    ... 
} while (false); 
0

प्रयास करें इस

do { 

    if($bla) { 
     $bla = get_bla(); 

     if (empty($bla)) { 
      break; 
     } 

     do($bla); 
    } 

    /* You can do more comparisions here */ 

} while (0); 
0

तुम सच में एक बयान है जिसमें से आप break, आप एक while बयान इस्तेमाल कर सकते हैं कर सकते हैं:

while ($bla) { 
    $bla = get_bla(); 

    if (!$bla) { 
     break; 
    } 

    do($bla); 

    // Maybe some more code... 

    // Do not forget to break out of the while loop! 
    break; 
} 

यह कई से बचने का एक अच्छा तरीका है नेस्टेड if कथन (जिसे कई मामलों में टाला जा सकता है), लेकिन break लूप पर सावधान रहें।

0

अगर अपनी हालत के लिए एक एकल चर के खिलाफ एक परीक्षण है, तो स्विच बयान एक बेहतर समाधान है और आप आसानी से बाहर तोड़ कर सकते हैं:

switch ($var_to_check) { // equivalent to if ($var_to_check==$value_against) 
    case $value_against: 
     ... 
     if ($something_wrong) { break; } // early exit from if 
     ... 
     break; // regular break 
    default: // equivalent to else 
     ... 
} // end of switch (or if) 
... // after the tests 

यह केवल एक परीक्षण जांच के लिए काम करता है। अगर किसी और चीज का एक गुच्छा संभालने का लाभ है।

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