任何方式来打破PHP中的语句?

在PHP中是否有任何命令停止执行当前或父级if语句,与switch / loop breakbreak(1)相同。 例如

 $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"; 

我想break上面的if语句并停止执行echo "yes"; 或不再需要执行的代码,可能有或可能没有附加条件,是否有办法做到这一点?

不要担心其他用户的评论,我可以理解你, 有时候开发这个“花哨”的东西是必需的 。 如果我们可以打破if,那么很多嵌套的ifs就不是必须的了,使得代码更加干净和美观。

这个示例代码说明 ,CERTAINS的情况下,如果可以比许多丑陋嵌套ifs更合适… 如果你没有面对某种情况并不意味着它不存在

难看的代码

 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的使用是一种替代方法,坏事情总是需要定义标签(点目标)。

在一个函数中封装你的代码。 您可以随时停止执行return的函数。

正确的方法来做到这一点:

 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(); } 

在阅读了一些评论之后,我意识到exception处理对于正常的stream量控制并不总是有意义的。 对于正常的控制stream量,最好使用“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(); } 

您也可以将过程返回值保存在variables中,然后检入失败/exception块,哪个过程失败。

转到 :

goto运算符可以用来跳转到程序中的另一个部分。 目标点由一个标签后跟一个冒号指定,指令以goto的forms给出,后跟所需的目标标签。 这不是一个完全无限制的转到 。 目标标签必须位于同一个文件和上下文中,这意味着您不能跳出某个函数或方法,也不能跳入其中。 你也不能跳入任何forms的循环或开关结构。 你可能会跳出这些,一个常见的用途是使用goto代替多层次的突破

因为你可以跳出一个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); 

你可以使用do-while(false):

  <?php do if ($foo) { // Do something first... // Shall we continue with this block, or exit now? if ($abort_if_block) break; // Continue doing something... } while (false); ?> 

http://php.net/manual/en/control-structures.if.php#90073中所述;

不,没有办法“打破”一个如果你像块内循环块。 :(
所以把你的testing变成一个switch

我想知道为什么没有人鼓励你使用switch语句 (即使你没有多lesstesting用例)
你认为这太冗长了吗?

我一定会去这里

  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; } 

对我来说,exception是为了引发错误,而不是真的去控制执行缺陷。
如果您试图设置的中断行为不是意外的错误,则exception处理不是正确的解决scheme:/

我遇到同样的问题,我喜欢下面:

 $a=1; switch($a) { case "1": if ($coniditon1){ break; } if ($coniditon2){ break; } if ($coniditon3){ break; } } 

这样我得到了我想要的东西。 我使用一个开关只有一个确定的情况,然后使用中断来select条件。 我使用break的原因是:condition1和conditon2都可以满足,在这种情况下,只有condition1被应用.IF根据顺序是有select的。

只要将不应该执行的代码移到else/elseif分支。 我真的不明白你为什么要做你想做的事情。

简单的答案是不,没有一个方法可以从if语句中断开,而不必完全停止执行(通过exit )。 其他解决scheme不适用于我,因为我无法更改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 

GOTO (上面的PHP 5.3版本)

 if(smth) { ..... ..... ..... ..... ..... goto Area1; ..... ..... } Area1: ....your code here.... 

没有。

但是怎么样:

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

回答你的问题,这是否是可以实现的,那么可以使用php的“goto”运算符来实现。

但从道德上讲,使用“goto”并不是一个好习惯,而且有必要使用goto,那么这意味着代码需要重构,以便goto的要求可以被移除。

根据你上面发布的示例代码,可以清楚地看到,代码可以被重build,不再需要的代码可以被删除或评论(如果将来有可能的话)。

 $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(); 

我有一个简单的解决scheme,没有太多的变化。 最初的说法是

我想打破上面的if语句并停止执行echo“yes”; 或不再需要执行的代码,可能有或可能没有附加条件,是否有办法做到这一点?

所以,看起来很简单。 尝试这样的代码。

 $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"; 

如果你想尝试没有这个代码,这很简单。 当你想要的时候你可以回来 另一个解决scheme是评论块。 或者只是思考和尝试在另一个分离的代码,并复制粘贴只在最终的代码中的结果。 如果一个代码不再需要,在你的情况下,结果可以是

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

与此代码,原来的声明是完全尊重.. :)和更具可读性!

我迟到了,但我想要贡献。 我很惊讶,没有人提出exit() 。 这对testing很有好处。 我一直使用它,像魅力一样工作。

 $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! 

简单的解决办法是将其注释掉。

 $a="test"; if("test"==$a) { //echo "yes"; //no longer needed - 7/7/2014 - updateded bla bla to do foo } 

额外的好处是你不改变你的原始代码,你可以约会,初始化,并为此原因。

为什么投票,根据OP要求,我认为这是一个完全有效的解决scheme。

“我想[打破上面的if语句,]停止执行echo”yes“;或者不再需要执行的代码,可能有或可能没有附加条件,是否有办法做到这一点?

事实上,有人可以看看其他一些解决scheme,一年后,并想知道那里发生了什么。 根据我的build议,可以留下好的文件供将来参考,这总是很好的做法。

要完全停止运行脚本的其余部分,可以这样做

出口; //代替rest。 其余的代码将不会执行

怎么样使用三元运算符?

 <?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']; } ?> 
 $a="test"; if("test"!=$a) { echo "yes"; } else { echo "finish"; }