วิธีใดในการทำลาย if statement ใน PHP?


129

มีคำสั่งใด ๆ ใน PHP จะหยุดการดำเนินการในปัจจุบันหรือผู้ปกครองifคำสั่งเดียวกับbreakหรือbreak(1)สำหรับ/switch loopตัวอย่างเช่น

$arr=array('a','b');
foreach($arr as $val)
{
  break;
  echo "test";
}

echo "finish";

ในโค้ดด้านบน PHP จะไม่ทำecho "test";และจะไปที่echo "finish";

ฉันต้องการสิ่งนี้สำหรับถ้า

$a="test";
if("test"==$a)
{
  break;
  echo "yes"; // I don't want this line or lines after to be executed, without using another if
}
echo "finish";

ฉันต้องการที่จะข้อความข้างต้นและหยุดการดำเนินการหรือรหัสดังกล่าวซึ่งจะไม่จำเป็นอีกต่อไปที่จะดำเนินการอาจจะมีหรือไม่อาจจะเป็นเงื่อนไขที่เพิ่มเติมจะมีวิธีการทำเช่นนี้?breakifecho "yes";

อัปเดต:เพียง 2 ปีหลังจากโพสต์คำถามนี้ฉันโตขึ้นฉันได้เรียนรู้ว่าโค้ดสามารถเขียนเป็นชิ้นเล็ก ๆ ได้อย่างไรทำไมการซ้อนกันจึงเป็นกลิ่นโค้ดได้และวิธีหลีกเลี่ยงปัญหาดังกล่าวตั้งแต่แรกโดยการเขียนฟังก์ชันขนาดเล็กที่สามารถจัดการได้


15
ตัวอย่างทั้งสองของคุณไม่มีเหตุผลใด ๆ
Tim Pietzcker

1
@Usman: หากไม่มีเงื่อนไขecho(ในตัวอย่างของคุณ) จะไม่ถูกดำเนินการ คุณก็อาจลบมันได้เช่นกัน
Oliver Charlesworth

2
ไม่ใช่try catchตัวเลือก?
giannis christofakis

ก่อนอื่นฉันคิดว่าทิมเป็นคนหยาบคาย ... แต่แล้วฉันก็คิดว่าเขาถูกต้อง ... ทำไมคุณถึงมีรหัสใด ๆ ที่อยู่เบื้องหลังการแบ่งโดยไม่มีเงื่อนไข? แก้จุดบกพร่อง? ฉันชอบแตกออกจากลูปด้วยการดำเนินการต่อ; และจะเป็นการดีที่จะแยกคำถามที่ยากมากด้วยคำสั่ง "หยุดตรงนี้" ...if (condition) { if ( oneothercondition ) stop; if ( yetothercondition ) stop; // go ahead , all is fine }
Joeri

@ Joeri ฉันไม่รู้ความคิดเริ่มต้นของ Muhhamad ว่าทำไมเขาถึงต้องการหยุดพัก แต่ในกรณีของฉันตอนนี้มันมีจุดประสงค์ในการดีบั๊กใช่ไหม ในบางกรณีจะช่วยประหยัดเวลา ในกรณีที่ไม่สามารถเพิ่มเบรกพอยท์ได้ (เมื่อไม่ได้ใช้ IDE และ / หรือต้องทำงานบนไซต์สดด้วยเหตุผลบางประการ ฯลฯ )
Viktor Borítás

คำตอบ:


216

ไม่ต้องกังวลเกี่ยวกับความคิดเห็นผู้ใช้อื่น ๆ ที่ฉันสามารถเข้าใจคุณบางครั้งเมื่อมีการพัฒนานี้ "แฟนซี" สิ่งที่จะต้อง หากเราสามารถทำลาย if ได้ก็ไม่จำเป็นต้องมี ifs ที่ซ้อนกันจำนวนมากทำให้โค้ดมีความสะอาดและสวยงามมากขึ้น

โค้ดตัวอย่างนี้แสดงให้เห็นว่าสถานการณ์ certains ที่ breaked ถ้าสามารถมากเหมาะกว่ามากของไอเอฟเอที่ซ้อนกันน่าเกลียด ... ถ้าคุณยังไม่ต้องเผชิญกับสถานการณ์บางอย่างที่ไม่ได้หมายความว่ามันไม่ได้มีอยู่

รหัสน่าเกลียด

if(process_x()) {

    /* do a lot of other things */

    if(process_y()) {

         /* do a lot of other things */

         if(process_z()) {

              /* do a lot of other things */
              /* SUCCESS */

         }
         else {

              clean_all_processes();

         }

    }
    else {

         clean_all_processes();

    }

}
else {

    clean_all_processes();

}

รหัสที่ดูดี

do {

  if( !process_x() )
    { clean_all_processes();  break; }

  /* do a lot of other things */

  if( !process_y() )
    { clean_all_processes();  break; }

  /* do a lot of other things */

  if( !process_z() )
    { clean_all_processes();  break; }

  /* do a lot of other things */
  /* SUCCESS */

} while (0);

ดังที่ @NiematojakTomasz กล่าวว่าการใช้gotoเป็นอีกทางเลือกหนึ่งสิ่งที่ไม่ดีเกี่ยวกับเรื่องนี้คือคุณต้องกำหนดป้ายกำกับ (เป้าหมายจุด) เสมอ


29
ที่ดี! บางครั้งคำถามอาจเข้าใจผิดเนื่องจากความรู้สึกลึกซึ้ง คุณเข้าใจดีฉันต้องการรหัสที่สะอาดเพื่อหลีกเลี่ยงการสิ้นสุดการติดตามของif
มูฮัมหมัดอุษมาน

4
ฉันต้องการรันโค้ดเดียวกันหลังจากการทดสอบสำเร็จแต่ละครั้ง (ประมาณ 3 หรือ 4 การทดสอบ) และelseifทำการทดสอบที่ล้มเหลวแต่ละครั้ง นี่คือสิ่งที่ฉันกำลังค้นหาตอนนี้รหัสของฉันเป็นไปตามมาตรฐาน KISS และ DRY :) ขอบคุณ!
s3v3n

3
ผู้ชายคนนี้รู้สึกสกปรก! แต่มันได้รับการโหวตเพิ่มขึ้น .. ฉันกำลังทำงานกับระบบสกปรก;)
LeonardChallis

8
@rdlowrey พูดคุยฟรีดังนั้นโปรดแสดงตัวอย่างของ "OOP ที่เขียนดี" เพื่อแก้ปัญหา OP: 3
AgelessEssence

7
อย่าสับสนกับคำขอของกลุ่มตัวอย่างต่อการโจมตีส่วนบุคคล ... อันที่จริงคุณกำลังพลาดบางสิ่งที่สำคัญไม่ใช่การเข้ารหัสทั้งหมดที่ควรเป็น OOP เป็นสิ่งที่บ้าคลั่งในการเขียนงานง่ายๆด้วยเวทมนตร์ * ของ OOP
AgelessEssence

98

ห่อหุ้มรหัสของคุณในฟังก์ชัน คุณสามารถหยุดเรียกใช้ฟังก์ชันreturnได้ทุกเมื่อ


2
ฉันแม้ว่าคุณต้องการ if ไม่ใช่ฟังก์ชัน? ;)
Arnaud Le Blanc

3
@ arnaud576875 หากโค้ดอยู่ในฟังก์ชันเกินกว่าที่คุณสามารถใช้ return ในคำสั่ง if เพื่อหยุดการดำเนินการ
Maxim Krizhanovsky

1
ฟังก์ชันควรมี "1 way in" และ "1 way out" ผลตอบแทนหลายรายการนั้นเลอะเทอะและเกิดข้อผิดพลาดได้ง่าย
Old Man Walter

@OldManWalter นั่นเป็นความจริงสำหรับการส่งคืนข้อมูลจริงเท่านั้น อย่างไรก็ตามการจัดการข้อผิดพลาดเป็นข้อยกเว้นทั่วไปสำหรับกฎนี้ ข้อยกเว้นการโยนหรือส่งคืนเท็จในหลายตำแหน่งเป็นสิ่งที่ยอมรับได้อย่างสมบูรณ์โดยไม่ต้องกระทบกับข้อผิดพลาดทั่วไปที่ความคิด "1 ทางเข้า 1 ทางออก" กำลังพยายามป้องกัน
danielson317

41

วิธีที่เหมาะสมในการทำสิ่งนี้:

try{
    if( !process_x() ){
        throw new Exception('process_x failed');
    }

    /* do a lot of other things */

    if( !process_y() ){
        throw new Exception('process_y failed');
    }

    /* do a lot of other things */

    if( !process_z() ){
        throw new Exception('process_z failed');
    }

    /* do a lot of other things */
    /* SUCCESS */
}catch(Exception $ex){
    clean_all_processes();
}

หลังจากอ่านความคิดเห็นบางส่วนฉันตระหนักว่าการจัดการข้อยกเว้นไม่เหมาะสมเสมอไปสำหรับการควบคุมการไหลตามปกติ สำหรับขั้นตอนการควบคุมปกติควรใช้ "If else" ดีกว่า:

try{
  if( process_x() && process_y() && process_z() ) {
    // all processes successful
    // do something
  } else {
    //one of the processes failed
    clean_all_processes();
  }
}catch(Exception ex){
  // one of the processes raised an exception
  clean_all_processes();
}

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


1
ข้อยกเว้นอาจมีประโยชน์ในกรณีนี้ แต่ดูเหมือนว่าคุณใช้ผิดประเภท ข้อยกเว้นเป็นข้อยกเว้นสำหรับขั้นตอนของโปรแกรมปกติ หากความล้มเหลวนั้นยอดเยี่ยม process_x-z ควรโยนข้อยกเว้นด้วยตัวมันเอง clean_all_processes () จะดีกว่าในบล็อกสุดท้ายเนื่องจากมีการล้างข้อมูลซึ่งต้องทำต่อไป
Jimmy T.

ฉันได้ปรับปรุงวิธีการแก้ปัญหาแล้ว
Rahul Ranjan

เหตุผลที่ฉันไม่ได้ใช้ในที่สุดคือไม่รองรับจนถึง php5.5
Rahul Ranjan

20

เนื่องจากคุณสามารถแยกออกจากลูป do / while ได้ให้เรา " ทำ " หนึ่งรอบ ด้วยในขณะที่ (เท็จ)ณ สิ้นสภาพไม่เคยมีจริงและจะไม่ทำซ้ำอีกครั้ง

do
{
    $subjectText = trim(filter_input(INPUT_POST, 'subject'));
    if(!$subjectText)
    {
        $smallInfo = 'Please give a subject.';
        break;
    }

    $messageText = trim(filter_input(INPUT_POST, 'message'));
    if(!$messageText)
    {
        $smallInfo = 'Please supply a message.';
        break;
    }
} while(false);

ไม่มีใครบอกว่าคุณต้องใช้สิ่งนั้น เป็นเพียงตัวอย่างในการ "งัด" ออกมา
Markus Zeller

2
แนวทางที่เป็นระเบียบเรียบร้อย - ทำงานได้ดี
benjaminhull

16

goto :

กลับไปข้างผู้ประกอบการสามารถใช้ในการกระโดดไปยังส่วนอื่นในโปรแกรม จุดเป้าหมายถูกระบุโดยป้ายกำกับตามด้วยเครื่องหมายจุดคู่และคำสั่งจะได้รับเป็นgotoตามด้วยป้ายกำกับเป้าหมายที่ต้องการ นี้ไม่ได้เป็นไม่ จำกัด เต็มข้ามไป ป้ายกำกับเป้าหมายต้องอยู่ในไฟล์และบริบทเดียวกันซึ่งหมายความว่าคุณไม่สามารถกระโดดออกจากฟังก์ชันหรือวิธีการและไม่สามารถข้ามไปที่ นอกจากนี้คุณยังไม่สามารถกระโดดเข้าไปในโครงสร้างแบบวนซ้ำหรือสลับประเภทใด ๆ คุณอาจกระโดดออกจากสิ่งเหล่านี้และการใช้งานทั่วไปคือการใช้gotoแทนการแบ่งหลายระดับ...


82
ทุกครั้งที่คุณใช้gotoBaby Jesus จะกินลูกแมว นอกจากนี้xkcd.com/292

12
ขออภัยที่เสมอต้นเสมอปลาย ฉันได้อ้างอิงหน้าคู่มือ php ซึ่งอธิบายการใช้งานคำหลักที่กล่าวถึง และแม้ว่าจะเป็นน้ำยาสกปรก แต่ก็ยังเป็นวิธีแก้ปัญหาที่ถูกต้อง
NiematojakTomasz

3
ฉันไม่เข้าใจอย่างแน่นอนว่าการทำเช่นนั้นไม่ดีอย่างไร? มันง่ายกว่าโซลูชันอื่น ๆ ทั้งหมด?
538ROMEO

1
เห็นด้วยกับSébastien ในบางกรณีตัวดำเนินการ goto มีประโยชน์มากและเรียบง่าย
Jerry

6
ไม่ต้องกังวลโปรแกรมเมอร์มักจะทำให้คุณรู้สึกว่าคุณเขียนโค้ดไม่ถูกต้องและต้องการให้เราเขียนโค้ดเหมือนพวกเขา นี่เป็นเรื่องจริงยิ่งกว่าในชุมชน php เพราะเราเป็นกลุ่มนักเขียนโค้ดฮิปสเตอร์และ PHP ให้คำหลักที่เป็นอิสระเหล่านี้แก่เราและมีอิสระในการตัดสินว่าทุกคนทำสิ่งต่างๆอย่างไร ฉันใช้gotoคีย์เวิร์ดในรหัสการผลิต(ไม่ครอบคลุม) และไม่เคยมีปัญหา
vdegenne

7

มีอยู่คำสั่ง: goto

if(smth) {
   .....
   .....
   .....
   .....
   .....
   goto Area1;
   .....
   .....


}



Area1:
....your code here....

อย่างไรก็ตามอย่าลืมgotoวิธีปฏิบัติที่แนะนำเนื่องจากจะทำให้โค้ดถูกจัดรูปแบบผิดปกติ


1
ฉันได้ทดสอบสคริปต์นี้แล้วรหัสด้านล่าง goto Area1; จะไม่ถูกดำเนินการ
Leon Armstrong


5

ไม่ไม่มีทางที่จะ "ทำลาย" if block ได้เหมือนที่คุณทำในลูป :(
ดังนั้นเปลี่ยนการทดสอบของคุณให้เป็นswitch!

ฉันสงสัยว่าทำไมไม่มีใครสนับสนุนให้คุณใช้คำสั่ง switchตั้งแต่นั้นมา (แม้ว่าคุณจะไม่ได้ทดสอบหลายกรณีก็ตาม)
คุณคิดว่ามันละเอียดเกินไปหรือไม่?

ฉันจะไปที่นี่แน่นอน

  switch($a){
    case 'test':
        # do stuff here ...
        if(/* Reason why you may break */){
           break; # this will prevent executing "echo 'yes';" statement
        }
        echo 'yes';  # ...           
        break; # As one may already know, we might always have to break at the end of case to prevent executing following cases instructions.
    # default:
        # something else here  ..
        # break;
  }

สำหรับฉันข้อยกเว้นมีไว้เพื่อเพิ่มข้อผิดพลาดและไม่ใช่เพื่อควบคุมข้อบกพร่องในการดำเนินการ
หากพฤติกรรมการหยุดพักที่คุณพยายามตั้งค่าไม่เกี่ยวกับข้อผิดพลาดที่ไม่คาดคิดการจัดการข้อยกเว้นไม่ใช่วิธีแก้ปัญหาที่ถูก:/ต้อง


ความคิดที่น่าสนใจ แต่ฉันจะไม่ใช้เป็นรหัส "จริง"
Jimmy T.

1
"จริง" คุณหมายถึงอะไร? :/
Stphane

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

« สวิตช์เปรียบเทียบนิพจน์กับค่า differents และดำเนินการบล็อกโค้ดเฉพาะโดยขึ้นอยู่กับค่าที่นิพจน์เท่ากับ» จากนั้นแต่ละบล็อกอาจประเมินนิพจน์ย่อยซึ่งในทางกลับกันอาจสั่งให้ขั้นตอนการดำเนินการส่งคืนหรือข้ามคำสั่งบางอย่าง ... ฉันไม่คิดว่าสวิตช์จะขัดกับหลักการที่น่าประหลาดใจน้อยที่สุดในกรณีการใช้งานที่แคบมาก แต่สิ่งนี้กล่าวว่าบริบทดั้งเดิมและ ข้อกำหนดอาจต้องมีการปรับโครงสร้างใหม่
Stphane

4
$a = 1;

switch($a) {

  case "1":

    if  ($condition1){
      break;
    }

    if  ($condition2){
      break;
    }

    if  ($condition3){
      break;
    }
}

ด้วยวิธีนี้ฉันได้สิ่งที่ฉันต้องการ ฉันใช้สวิตช์เฉพาะกรณีที่แน่นอนแล้วใช้ตัวแบ่งในกรณีที่เลือกเงื่อนไข เหตุผลที่ฉันใช้ตัวแบ่ง: condition1 และ condition2 ทั้งคู่อาจเป็นไปตามนั้นในสถานการณ์นั้นจะใช้เฉพาะ condition1 เท่านั้น i จะถูกเลือกตามลำดับ


8
คุณไม่ต้องการตัวแปรสำหรับสิ่งนี้ เพียงใช้switch(true) { case true:
Maxim Krizhanovsky

1

เลขที่

แต่วิธีการ:

$a="test";
if("test"==$a)
{
  if ($someOtherCondition)
  {
    echo "yes";
  }
}
echo "finish";

3
ขอบคุณ แต่ฉันกำลังมองหารุ่นที่ง่ายในการนี้เพื่อหลีกเลี่ยงมากเกินไปifงบ
มูฮัมหมัด Usman

2
@Usman: หากคุณมีเงื่อนไขหลายข้อคุณต้องตรวจสอบ การตรวจสอบเงื่อนไขโดยทั่วไปเกี่ยวข้องกับifคำสั่ง ฉันไม่แน่ใจว่าคุณจะหลีกเลี่ยงปัญหานี้ได้อย่างไร
Oliver Charlesworth

1

เพียงแค่ย้ายรหัสที่ไม่ควรถูกเรียกใช้ไปยังelse/elseifสาขา ฉันไม่เห็นจริงๆว่าทำไมคุณถึงอยากทำในสิ่งที่คุณพยายามทำ


1

คำตอบง่ายๆคือไม่ไม่มีวิธีที่จะแยกออกจากifคำสั่งโดยไม่หยุดการดำเนินการอย่างสมบูรณ์ (ผ่านexit) วิธีแก้ปัญหาอื่น ๆ ใช้ไม่ได้กับฉันเพราะฉันไม่สามารถเปลี่ยนโครงสร้างของifคำสั่งได้เนื่องจากฉันกำลังฉีดโค้ดลงในปลั๊กอินดังนี้:

if ( condition ) {
  // Code and variables I want to use

  // Code I have control over

  // Code I don't want to run
}
// More code I want to use

0

ตอบคำถามของคุณว่าทำได้หรือไม่ใช่นั่นทำได้โดยใช้โอเปอเรเตอร์ "goto" ของ php

แต่ตามหลักจริยธรรมแล้วมันไม่ใช่แนวปฏิบัติที่ดีในการใช้ "goto" และไม่มีความจำเป็นใด ๆ ที่จะต้องใช้ goto นั่นหมายความว่าโค้ดจะต้องได้รับการสร้างขึ้นใหม่เพื่อที่จะสามารถลบข้อกำหนดของ goto ได้

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


0
$arr=array('test','go for it');
$a='test';
foreach($arr as $val){
  $output = 'test';
  if($val === $a) $output = "";
  echo $output;
}
echo "finish";

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

สำหรับรหัสที่น่าเกลียดและดูดีคำแนะนำของฉันจะเป็น:

function myfunction(){
  if( !process_x() || !process_y() || !process_z()) {
    clean_all_processes();  
    return; 
  }
/*do all the stuff you need to do*/
}

ที่ไหนสักแห่งในรหัสปกติของคุณ

myfunction();

0

ฉันคิดว่าคุณกำลังมองหาสิ่งนี้:

if (condition) { 
    if ( oneothercondition ) continue;  
    if ( yetothercondition ) continue; 

    // go ahead , all is fine
}

คู่มือ php แสดงforตัวอย่าง แต่ฉันคิดว่ามันก็ใช้ได้เช่นกันif


-1

ฉันมีวิธีง่ายๆโดยไม่มีการเปลี่ยนแปลงมากมาย คำสั่งเริ่มต้นคือ

ฉันต้องการทำลายคำสั่ง if ด้านบนและหยุดดำเนินการ echo "ใช่"; หรือรหัสดังกล่าวที่ไม่จำเป็นต้องดำเนินการอีกต่อไปอาจมีหรือไม่มีเงื่อนไขเพิ่มเติมมีวิธีดำเนินการอย่างไร

มันดูเรียบง่าย ลองใช้รหัสแบบนี้

$a="test";
if("test"==$a)
{
  if (1==0){
      echo "yes"; // this line while never be executed. 
      // and can be reexecuted simply by changing if (1==0) to if (1==1) 
  }
}
echo "finish";

หากคุณต้องการลองโดยไม่มีรหัสนี้ก็ทำได้ง่ายๆ และคุณสามารถกลับมาเมื่อคุณต้องการ อีกวิธีหนึ่งคือบล็อกความคิดเห็น หรือเพียงแค่คิดและลองใช้รหัสอื่นที่แยกจากกันแล้วคัดลอกวางเฉพาะผลลัพธ์ในโค้ดสุดท้ายของคุณ และถ้ารหัสไม่จำเป็นอีกต่อไปในกรณีของคุณผลลัพธ์อาจเป็นได้

$a="test";
echo "finish";

ด้วยรหัสนี้คำสั่งเดิมได้รับการเคารพอย่างสมบูรณ์ .. :) และอ่านได้มากขึ้น!


-2

วิธีแก้ง่ายๆคือแสดงความคิดเห็นออกมา

$a="test";
if("test"==$a)
{

  //echo "yes"; //no longer needed - 7/7/2014 - updateded bla bla to do foo
}

ข้อดีเพิ่มเติมคือการไม่เปลี่ยนรหัสเดิมของคุณและคุณสามารถลงวันที่เริ่มต้นและระบุเหตุผลได้

ทำไมการโหวตลงตามคำขอของ OP ฉันคิดว่านี่เป็นวิธีแก้ปัญหาที่สมบูรณ์แบบ

"ฉันต้องการ [ทำลายคำสั่ง if ด้านบนและ] หยุดการดำเนินการ echo" ใช่ "หรือรหัสดังกล่าวที่ไม่จำเป็นต้องดำเนินการอีกต่อไปอาจมีหรืออาจไม่มีเงื่อนไขเพิ่มเติมมีวิธีดำเนินการนี้หรือไม่"

ในความเป็นจริงใครบางคนสามารถดูวิธีแก้ปัญหาอื่น ๆ ได้ในปีต่อมาและสงสัยว่าเกิดอะไรขึ้นที่นั่น ตามข้อเสนอแนะของฉันเราสามารถทิ้งเอกสารที่ดีไว้สำหรับการอ้างอิงในอนาคตซึ่งเป็นแนวทางปฏิบัติที่ดีเสมอ


2
วิธีนี้ไม่สามารถแก้ปัญหาได้ การหยุดพักอาจอยู่ใน if
Jimmy T.

คุณไม่สามารถแสดงความคิดเห็นในคำสั่ง if? หรือแสดงความคิดเห็นอย่างใดอย่างหนึ่ง? คุณหมายถึงใช้ if เพื่อยกเว้นการดำเนินการหรือไม่? ถ้างั้นจุดพักคืออะไรถ้างบมีไว้เพื่ออะไร? เพียงแค่แสดงความคิดเห็นออกมาด้วย ขออภัย แต่ไม่เห็นประเด็นของคุณ
ArtisticPhoenix

สิ่งนี้: a: if ("test" == $ a) {... if (... ) break a; ... }
Jimmy T.

-3

สิ่งที่เกี่ยวกับการใช้ตัวดำเนินการ ternary?

<?php
 // Example usage for: Ternary Operator
 $action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
?>

ซึ่งเหมือนกับคำสั่ง if / else นี้:

<?php
 if (empty($_POST['action'])) {
   $action = 'default';
 } else {
   $action = $_POST['action'];
 }
?>

ใน PHP7:$a = $_POST['action'] ?? 'default';
Tobias Mühl

-3

หากต้องการหยุดการทำงานของสคริปต์ที่เหลือโดยสมบูรณ์คุณสามารถทำได้

ออกจาก; // แทนที่ ส่วนที่เหลือของโค้ดจะไม่ทำงาน


-4

ฉันไปงานปาร์ตี้สาย แต่อยากมีส่วนร่วม exit()ฉันประหลาดใจที่ไม่มีใครแนะนำ เป็นเรื่องดีสำหรับการทดสอบ ฉันใช้มันตลอดเวลาและทำงานอย่างมีเสน่ห์

$a ='';
$b ='';
if($a == $b){
echo 'Clark Kent is Superman';
exit();
echo 'Clark Kent was never Superman';
}

รหัสจะหยุดที่exit()และทุกอย่างหลังจากนั้นจะไม่ทำงาน

ผลลัพธ์

Clark Kent is Superman

มันทำงานร่วมกับforeach()และwhile()เช่นกัน ทำงานได้ทุกที่ที่คุณวางไว้จริงๆ

foreach($arr as $val)
{
  exit();
  echo "test";
}

echo "finish";

ผลลัพธ์

nothing gets printed here.

ใช้กับไฟล์ forloop()

for ($x = 2; $x < 12; $x++) {
    echo "Gru has $x minions <br>";
    if($x == 4){
    exit();
    }
}

ผลลัพธ์

Gru has 2 minions
Gru has 3 minions
Gru has 4 minions

ในสถานการณ์กรณีปกติ

$a ='Make hot chocolate great again!';
echo $a;
exit();
$b = 'I eat chocolate and make Charlie at the Factory pay for it.';

ผลลัพธ์

Make hot chocolate great again!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.