为什么当错误报告设置为 E_STRICT 时,当代码中有拼写错误时,PHP 不会抛出错误


Why does PHP not throw an error when you have a typo in the code when error reporting is set to E_STRICT

编辑:为了使这个问题并非完全无用,我正在改变主题。

为什么当你有像contninue这样的拼写错误时,PHP不会抛出错误;当错误报告设置为E_STRICT时,在代码中。

请参阅我下面的原始问题。我试图继续一个 foreach 循环,但不小心写了 contninue;而不是继续;,但是在运行脚本时,我没有收到来自 NetBeans IDE 或 PHP 的警告或错误。我有E_STRICT和E_ALL错误报告,HTML错误,显示错误等。有没有办法让PHP编程对这些愚蠢的错误更加防弹?请注意,没有名为 contninue 的变量或函数。事实上,我几乎可以在一行中键入任何内容,包括dsafdsfdafdsafdsafdsafdsa_FDA9812324398s;并且它不会抛出错误。


原始问题:为什么不继续在 PHP 中每个循环跳到下一个循环?

发布这样的问题有点尴尬,但在这里......

下面是来自函数的一小段代码。我只是尝试重新创建一个数组,过滤掉数组中满足某些条件的一个或多个项目,在这种情况下匹配 postId。(这是Wordpress的发展,如果你想知道的话。

在我的简单 foreach 循环中,continue; 命令似乎没有完成它的工作。至少它的行为不符合我对我使用过的任何其他语言(C,C#,MEL,Javascript等)的期望。回显输出始终包括"应该退出但没有退出!",即使它在继续之后;并且永远不应该被执行。此外,生成的数组总是包含过滤的内容,即使"已删除"。$postId显然跑了。

$posts = get_posts( $args ); // posts is an array of objects
if($posts == null) return; // no posts
if($includeCurrentPost || $postId < 0) return $posts; // we are including all posts, so just return it
// Remove current post id from list since excluding
$newPosts = array();
$count = 0;
foreach($posts as $p) {
    if($p->ID == $postId) {
        echo("REMOVED " . $postId);
        contninue;
        echo("should have exited but it did not!");
    }
    $newPosts[$count++] = $p;
}
return $newPosts;

好吧,我通常用C#编程,并认为自己是一个不错的中级程序员。这没有任何意义。@_@我猜它会变成一些愚蠢的语法错误,PHP 只是让我逃脱了我看不到的东西......

PHP版本它是5.3的东西,Apache,运行在Windows Vista上。

我刚刚在这里尝试了您的代码:http://writecodeonline.com/php/

$posts = array(1,2,3,4,5);
foreach($posts as $p) {
    if($p == 3) {
        echo("REMOVED " . $p . "'n");
        contninue;
        echo("should have exited but it did not!");
    }
    echo("Other stuff'n");
}

它不起作用,因为 contninue 而不是 continue ,但默认情况下也没有错误(这可能意味着您没有严格的错误)。

修正拼写错误时:

$posts = array(1,2,3,4,5);
foreach($posts as $p) {
    if($p == 3) {
        echo("REMOVED " . $p . "'n");
        continue;
        echo("should have exited and it did!");
    }
    echo("Other stuff'n");
}

它有效

在 PHP 中,continue 结束当前迭代,但不会中断循环。 中断将结束循环