【问题标题】:End a php tag without die() or exit()结束一个没有 die() 或 exit() 的 php 标签
【发布时间】:2012-12-26 18:13:46
【问题描述】:

我想知道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,因为真的不值得使用更多的过程来制作它“更具可读性”(例如:try - catches 使用了太多资源,我也不打算这样做)。我的怀疑只是为了这个,我只会在我的ajax文件中使用die函数使用这个过程(我不知道是否推荐,但我认为没有问题,因为PHP应该有它出于某种原因)

【问题讨论】:

  • 如果你需要这样的功能,你可能做得不对...
  • 我不完全明白你想要做什么。关闭 PHP 标记对执行没有任何作用……只是指定 PHP 代码在哪里和不在哪里。您是否偶然寻找breaknext
  • 我更喜欢使用if/else 语句

标签: php function tags


【解决方案1】:

例外是您要寻找的:

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

【讨论】:

  • 嗯.. 使用异常进行分支通常不受欢迎。
  • @EricPetroelje,退出特定代码块正是例外的原因。
【解决方案2】:

我打算把它扔出去然后躲起来,但如果你真的需要这样做,那么goto 实际上是一个不错的选择:

<?php

    echo 'first';

    goto endofblock;

    echo 'second';

endofblock:

?>

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

<?php
do {
    echo 'first';

    break;

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

【讨论】:

    【解决方案3】:

    为什么不用开关和外壳?

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

        PHP 解释器将文件作为一个单元处理,&lt;?php 标记仅指定要忽略的文本部分(标记外),就像 cmets 一样。该标签不与代码的任何部分接壤。 所以在你的情况下,我认为goto 语句可能是正确的选择。或者,如果您可以将代码放入function,您可以使用return

        【讨论】:

        • 是的,从所有的解决方案中,我认为这个是最好的,将代码打包在一个函数中,然后使用返回应该可以工作,但我会留下 if - elses。谢谢!。
        猜你喜欢
        • 2022-09-23
        • 1970-01-01
        • 1970-01-01
        • 2010-12-20
        • 2023-03-11
        • 2012-07-24
        • 1970-01-01
        • 2014-01-03
        相关资源
        最近更新 更多