致命错误:“break”不在“loop”或“switch”上下文中

Posted

技术标签:

【中文标题】致命错误:“break”不在“loop”或“switch”上下文中【英文标题】:Fatal error: 'break' not in the 'loop' or 'switch' context in 【发布时间】:2016-04-24 14:18:38 【问题描述】:

我已经设置了一个 wordpress 博客(我导入了数据库)并且它抛出了这个 错误

致命错误:'break'不在'loop'或'switch'上下文中 /home/kbuzz/webapps/kb_blog/wp-content/plugins/types/embedded/common/toolset-forms/lib/adodb-time.inc.php 1012行

代码如下,从10041013

function adodb_tz_offset($gmt,$isphp5)

    $zhrs = abs($gmt)/3600;
    $hrs = floor($zhrs);
    if ($isphp5) 
        return sprintf('%s%02d%02d',($gmt<=0)?'+':'-',floor($zhrs),($zhrs-$hrs)*60); 
    else
        return sprintf('%s%02d%02d',($gmt<0)?'+':'-',floor($zhrs),($zhrs-$hrs)*60); 
    break;

【问题讨论】:

去掉代码中的break,为什么需要break in函数 @ChetanAmeta 感谢修复 【参考方案1】:

使用return false; 而不是break;exit();continue; 这会阻止脚本的其余部分运行,但如果规则仍然为真则将继续循环

【讨论】:

【参考方案2】:

PHP 5.xx,在forforeachwhileswitch 语句之外的break 语句DID NOT 抛出错误消息并且在语法上没问题。

PHP 7.0 及更高版本,在 forforeachwhileswitch 语句之外不再允许使用 break 语句,并给出致命错误。

示例代码:

<?php
if (2 == 1 + 1) 
    echo "Dummy Example of break inside if condition";
    break; // - Valid in php 5.*
           // - Gives a Fatal error in PHP 7.*.*:
           // "Fatal error: 'break' not in the 'loop' or 'switch' context in ... "

?>

【讨论】:

这个答案部分正确,但导致我浪费了大量时间来追踪错误的问题。在 while 循环中仍然允许使用 break 和 continue。 谢谢!我能够通过在有问题的 .php 文件中注释掉(无用的)break 语句来解决问题。 那还有其他选择吗?阻止脚本的其余部分运行的东西? @davewhirlwind 他没有说在while循环中是不允许的:)所以仍然是一个正确的答案。但为什么没有将其标记为答案? 仍然允许在 for、while 和 switch 语句中使用。其他地方不允许这样做。【参考方案3】:

break;

替换为

return false;

在您的代码中,它将起作用。

【讨论】:

我认为这是一个更笼统的答案。通过一些解释,它将成为最好的答案。在我的情况下,我有:function do_something() if ($condition) &lt;code block 1&gt; else break; &lt;code block 2&gt; 如果我只是删除 break 将被执行。使用return false; 将不会被执行。【参考方案4】:

删除break 修复了它

function adodb_tz_offset($gmt,$isphp5)

   $zhrs = abs($gmt)/3600;
    $hrs = floor($zhrs);
if ($isphp5) 
    return sprintf('%s%02d%02d',($gmt<=0)?'+':'-',floor($zhrs),($zhrs-$hrs)*60); 
else
    return sprintf('%s%02d%02d',($gmt<0)?'+':'-',floor($zhrs),($zhrs-$hrs)*60); 

【讨论】:

以上是关于致命错误:“break”不在“loop”或“switch”上下文中的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:不在对象上下文错误中使用 $this [重复]

PHP 致命错误:不在对象上下文中使用 $this

使用 gcc 编译时导致错误的 case break [关闭]

无法过去 - 线程 1:致命错误:在展开可选值时意外发现 nil [重复]

GIT 致命:模棱两可的参数“HEAD”:未知修订版或路径不在 Travis 的工作树中

PHP致命错误:无法中断/继续