结束php标记,不要使用die()或exit()


End a php tag without die() or exit()

我想知道PHP是否有一个函数允许我在到达"?>"标签,例如:

<?php
    echo 'first';
    endphptag();
    echo 'second';
?>
third
<?php
    echo 'fourth';
?>

那么输出应该是:

first
third
fourth

我知道有些人认为这是无用的,但我想为iframe上的验证脚本做这件事,而不是使用dieexit函数,因为它会杀死整个脚本,我只想结束它的一部分。

通常我使用if - else代替,但我想避免它们,因为进程很大,我想要一些更可读的东西,顺便说一下,我在我的ajax脚本中使用if - die,我想在我的iframes中使用这样的东西,谢谢!


嗯,我只是想知道PHP是否已经为它提供了一个合适的函数(似乎没有),所以我想我就把它留给if - else,因为使用更多的进程来使它"更可读"是不值得的(例如:try - catch使用了太多的资源,我也不打算去做)。我只会在我的ajax文件中使用die函数来使用这个过程(我不知道是否推荐,但我认为没有问题,因为PHP出于某种原因应该有它)

例外是你正在寻找的:

try {
    // code
} catch (Exception $e) {
    // handling
}

你把你的代码放在try块中,你用throw new Exception();抛出一个异常,它只退出try块中的其余代码。

你的代码应该是:

<?php
    try {
        echo 'first';
        throw new Exception();
        echo 'second';
    } catch (Exception $e) {}
?>
third
<?php
    echo 'fourth';
?>

我要把这个扔在那里和鸭子,但如果你真的需要这样做,那么goto实际上是一个不错的选择:

<?php
    echo 'first';
    goto endofblock;
    echo 'second';
endofblock:
?>

或者你可以用假循环来避免goto的"邪恶"。对于编译器来说,它们基本上是一样的,但是其他程序员不会因为你使用了goto

而把你打死。
<?php
do {
    echo 'first';
    break;
    echo 'second';
} while (false)        
?>

为什么不使用开关和大小写?

  • http://php.net/manual/en/control-structures.switch.php

如果我是你,我会省略end-php标记。大多数编码标准都不建议这样做,原因太长,在这里无法解释。

但除此之外,继续使用if/else或switch/case控制结构。如果使用OOP,则将验证过程的大部分从内联代码中取出,并将它们打包到函数或类方法中。

参见关于GOTO的说明;-)http://xkcd.com/292/

PHP解释器将文件作为单个单元处理,<?php标记只是指定要忽略的文本部分(在标记之外),就像注释一样。标签不与代码的任何部分相邻。所以在你的情况下,我认为goto声明可能是正确的选择。或者,如果您可以将代码放入function,则可以使用return