我想知道PHP是否有一个允许我在进入“?>”之前结束进程的函数标签,例如:
<?php
echo 'first';
endphptag();
echo 'second';
?>
third
<?php
echo 'fourth';
?>
然后输出应为:
first
third
fourth
我知道有些人认为这是无用的,但我想在iframe上使用验证脚本而不是使用die
或exit
函数,因为它会杀死整个脚本,我只是想结束它的一部分。
通常我使用if - else
代替,但我想避免它们,因为进程很大,我希望更具可读性,就像我在我的ajax脚本中使用if - die
并且我想使用在我的iframe中也是这样的,感谢你!
好吧,我只是想知道PHP是否已经有了它的正常功能(似乎没有),所以我想我会留下if - elses,因为不值得使用更多的进程来制作它“更具可读性”(例如:尝试 - 捕获使用了太多资源,我不打算去做)。我的疑问只是为了那个,我只会使用die函数在我的ajax文件中使用这个过程(我不知道是否推荐它,但我认为没有问题,因为PHP应该出于某些原因)
答案 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
。