6

我想知道 PHP 是否具有允许我在进程到达“?>”标记之前结束进程的功能,例如:

<?php

    echo 'first';

    endphptag();

    echo 'second';

?>

third

<?php

    echo 'fourth';

?>

那么输出应该是:

first

third

fourth

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

通常我使用它if - else,但我想避免它们,因为进程很大,我想要一些更具可读性的东西,顺便说一下我if - die在我的 ajax 脚本中使用的方式,我也想在我的 iframe 中使用类似的东西,谢谢!


好吧,我只是想知道 PHP 是否已经有一个合适的函数(似乎没有),所以我想我会把它留给 if - elses,因为真的不值得使用更多的过程来让它“更具可读性” "(例如:try - catches 占用了太多资源,我也不打算去)。我的怀疑只是为了这个,我只会使用 die 函数在我的 ajax 文件中使用这个过程(我不知道是否推荐,但我认为没有问题,因为 PHP 出于某种原因应该有它)

4

5 回答 5

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';
?>
于 2012-12-26T18:17:09.227 回答
2

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

<?php

    echo 'first';

    goto endofblock;

    echo 'second';

endofblock:

?>

或者,您可以使用人造循环避免 goto 的“邪恶”。对编译器来说,它们看起来基本相同,但其他程序员不会因为使用而将你打死goto

<?php
do {
    echo 'first';

    break;

    echo 'second';
} while (false)        
?>
于 2012-12-26T18:22:26.573 回答
1

为什么不使用开关和外壳?

于 2012-12-26T18:17:04.277 回答
0

PHP 解释器将文件作为一个单元工作,<?php标签只是指定要忽略的文本部分(标签外),就像注释一样。该标记不与代码的任何部分接壤。因此,就您而言,我认为该goto声明可能是正确的选择。或者,如果您可以将代码放入 中function,则可以使用return.

于 2012-12-26T18:41:20.270 回答
0

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

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

另请参阅有关 GOTO 的注释;-) http://xkcd.com/292/

于 2012-12-26T18:33:18.663 回答