ความแตกต่างระหว่างตัวแบ่งและต่อใน PHP?


คำตอบ:


517

breakสิ้นสุดการวนซ้ำอย่างสมบูรณ์continueเพียงทางลัดการวนซ้ำปัจจุบันและไปยังการวนซ้ำถัดไป

while ($foo) {   <--------------------┐
    continue;    --- goes back here --┘
    break;       ----- jumps here ----┐
}                                     |
                 <--------------------┘

จะใช้เช่นนี้เพื่อ:

while ($droid = searchDroids()) {
    if ($droid != $theDroidYoureLookingFor) {
        continue; // ..the search with the next droid
    }

    $foundDroidYoureLookingFor = true;
    break; // ..off the search
}

56
การใช้ฟังก์ชั่นเหล่านี้ในทางที่ผิดส่งผลให้เกิดสิ่งนี้: flickr.com/photos/24973901@N04/2762458387
neokio

7
รักคำตอบนี้! เตือนฉันเกี่ยวกับคำแนะนำของ WP.org เกี่ยวกับเงื่อนไขของ Yoda: make.wordpress.org/core/handbook/coding-standards/php/ …
Bob Gregor

4
7 ปีหลังจากคำตอบนี้ แต่มันก็คุ้มที่จะพูดแบบนี้ เช่นเดียวกับในเอกสาร PHPจาก v4 breakและมีความเหมือนกันในcontinue switchทั้งทางออกจากสวิตช์ continue 2เพื่อออกจากวงด้านนอกถ้ามีหรือเพื่อการใช้งาน
Amin.Qarabaqi

@BobGregor ขณะนี้สามารถหาซื้อได้ที่make.wordpress.org/core/handbook/best-practices/…
Douwe de Haan

@deceze ตัวอย่างนี้มีรหัสไม่ดี คุณกำหนดตัวแปรที่ไม่ได้ใช้งานได้ทุกที่ การแก้ไขที่แนะนำนั้นสามารถอ่านได้มากขึ้น
Tajni

49

break ออกจากลูปที่คุณอยู่ดำเนินการต่อเริ่มด้วยรอบถัดไปของลูปทันที

ตัวอย่าง:

$i = 10;
while (--$i)
{
    if ($i == 8)
    {
        continue;
    }
    if ($i == 5)
    {
        break;
    }
    echo $i . "\n";
}

จะส่งออก:

9
7
6

1
+1; เหมือนกับโดยทั่วไปทุกภาษาอื่น ๆ ที่ใช้คำหลักเหล่านี้
Karl Knechtel

+1; คำอธิบายง่ายๆและตัวอย่างที่ดีแม้กระทั่งแป้งwhile(--$i)ก็ค่อนข้างยุ่งยากสำหรับมือใหม่

@Omeid ฉันยอมรับว่ามันเป็นเรื่องยุ่งยาก ... แต่ผมไม่แน่ใจว่าของไวยากรณ์สำหรับวงของ PHP และขี้เกียจที่จะดูมันขึ้น
Hinek

นี่เป็นตัวอย่างที่ยอดเยี่ยม!
demuro1

1
ตัวอย่างที่ยอดเยี่ยม (บรรทัด echo $ i. "\ n" ต้องมีเครื่องหมายอัฒภาคในตอนท้าย)
user3563097

16

หยุดพัก:

ตัวแบ่งจะสิ้นสุดการประมวลผลของกระแส for foreach ขณะที่ do-while หรือ switch โครงสร้าง

ดำเนินการต่อ:

ดำเนินการต่อจะใช้ภายในโครงสร้างวนลูปเพื่อข้ามส่วนที่เหลือของการวนซ้ำปัจจุบันและดำเนินการต่อที่การประเมินสภาพจากนั้นเริ่มต้นการทำซ้ำครั้งถัดไป

ดังนั้นขึ้นอยู่กับความต้องการของคุณคุณสามารถรีเซ็ตตำแหน่งที่กำลังดำเนินการในรหัสของคุณในระดับที่แตกต่างกันของการทำรังในปัจจุบัน

นอกจากนี้ดูที่นี่สำหรับรายละเอียดที่เป็นศิลปะ Break vs Continue กับตัวอย่างจำนวนมาก


14

สำหรับบันทึก:

ทราบว่าในภาษา PHP สวิตช์คำสั่งถือว่าเป็นโครงสร้างการวนลูปเพื่อวัตถุประสงค์ของการดำเนินการต่อไป


ฉันถูกกัดโดย "คุณสมบัติ" นี้ ฉันจะทำต่อไปอีกซักพักโดยอิงจากสิ่งที่ค้นพบในกล่องสวิตช์ได้อย่างไร
MattBianco

1
@MattBianco คุณใช้continue 2ในกรณีเหล่านั้น
flaviovs

5

ตัวแบ่งที่ใช้เพื่อออกจากคำสั่งวนรอบ แต่ทำต่อไปเพียงหยุดสคริปต์บนเงื่อนไขที่เฉพาะเจาะจง

for($i=0; $i<10; $i++){
    if($i == 5){
        echo "It reach five<br>";
        continue;
    }
    echo $i . "<br>";
}

echo "<hr>";

for($i=0; $i<10; $i++){
    if($i == 5){
         echo "It reach end<br>";
         break;
    }
    echo $i . "<br>";
}

หวังว่ามันจะช่วยคุณได้


4

การแตกจะจบโครงสร้างการวนรอบ / การควบคุมในปัจจุบันและข้ามไปยังจุดสิ้นสุดการวนซ้ำไม่ว่าจะมีการวนซ้ำเป็นจำนวนเท่าไร

ข้ามไปยังจุดเริ่มต้นของการวนซ้ำครั้งถัดไปของวงต่อไป


4

'ดำเนินการต่อ' จะใช้ภายในโครงสร้างวนรอบเพื่อข้ามส่วนที่เหลือของการวนซ้ำปัจจุบันและดำเนินการต่อไปที่การประเมินสภาพแล้วเริ่มต้นการทำซ้ำครั้งต่อไป

'break' จะหยุดการทำงานของกระแส for foreach ขณะที่ do-while หรือ switch โครงสร้าง

break ยอมรับอากิวเมนต์ตัวเลขที่เป็นทางเลือกซึ่งบอกว่ามีโครงสร้างที่ซ้อนกันหลายโครงที่จะแตกออก

ลองดูลิงค์ต่อไปนี้:

http://www.php.net/manual/en/control-structures.break.php

http://www.php.net/manual/en/control-structures.continue.php

หวังว่ามันจะช่วย ..


3

break จะหยุดการวนรอบปัจจุบัน (หรือส่งจำนวนเต็มเพื่อบอกจำนวนลูปที่จะแยกจาก)

continue จะหยุดการวนซ้ำปัจจุบันและเริ่มต้นการถัดไป



2

ฉันไม่ได้เขียนอะไรแบบเดียวกันที่นี่ เพียงแค่บันทึกการเปลี่ยนแปลงจากคู่มือ PHP


การเปลี่ยนแปลงเพื่อดำเนินการต่อ

Version Description

7.0.0 - continue outside of a loop or switch control structure is now detected at compile-time instead of run-time as before, and triggers an E_COMPILE_ERROR.

5.4.0   continue 0; is no longer valid. In previous versions it was interpreted the same as continue 1;.

5.4.0   Removed the ability to pass in variables (e.g., $num = 2; continue $num;) as the numerical argument.

การเปลี่ยนแปลงสำหรับการหยุดพัก

Version Description

7.0.0   break outside of a loop or switch control structure is now detected at compile-time instead of run-time as before, and triggers an E_COMPILE_ERROR.

5.4.0   break 0; is no longer valid. In previous versions it was interpreted the same as break 1;.

5.4.0   Removed the ability to pass in variables (e.g., $num = 2; break $num;) as the numerical argument.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.