结束没有die()或exit()的php标签

时间:2012-12-26 18:13:47

标签: php function tags

我想知道PHP是否有一个允许我在进入“?>”之前结束进程的函数标签,例如:

<?php

    echo 'first';

    endphptag();

    echo 'second';

?>

third

<?php

    echo 'fourth';

?>

然后输出应为:

first

third

fourth

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

通常我使用if - else代替,但我想避免它们,因为进程很大,我希望更具可读性,就像我在我的ajax脚本中使用if - die并且我想使用在我的iframe中也是这样的,感谢你!


好吧,我只是想知道PHP是否已经有了它的正常功能(似乎没有),所以我想我会留下if - elses,因为不值得使用更多的进程来制作它“更具可读性”(例如:尝试 - 捕获使用了太多资源,我不打算去做)。我的疑问只是为了那个,我只会使用die函数在我的ajax文件中使用这个过程(我不知道是否推荐它,但我认为没有问题,因为PHP应该出于某些原因)

5 个答案:

答案 0 :(得分:4)

您正在寻找例外:

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';
?>

答案 1 :(得分:2)

我要把它扔到那里然后躲开,但如果你真的需要这样做,那么goto实际上并不是一个糟糕的选择:

<?php

    echo 'first';

    goto endofblock;

    echo 'second';

endofblock:

?>

或者你可以用一个虚假的循环来避免goto的“邪恶”。对于编译器,它们看起来基本相同,但其他程序员不会因使用goto

而致死你
<?php
do {
    echo 'first';

    break;

    echo 'second';
} while (false)        
?>

答案 2 :(得分:1)

为什么不使用开关和箱子?

答案 3 :(得分:0)

如果我是你,我会省略end-php标签。大多数编码标准都提出反对意见,原因太冗长,无法在此解释。

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

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

答案 4 :(得分:0)

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