重定向还是死?这些死亡陈述有用吗?

时间:2011-08-24 13:40:01

标签: php cakephp

继承了一个使用大量$this->redirect($url)语句的Cakephp应用程序;所有这些都跟着die();如下:

$this->redirect($url);
die();

我只能假设这是一种错误形式的错误捕获,但我不明白为什么这将是必要的。 $this->redirect使用我的框架中的URL重定向函数,我们的应用程序没有改变任何内容;如果它不起作用,那么我的框架不起作用,所以整个网站上的任何内容都不会起作用。死();语句使编写代码变得非常困难,并找到错误预期的位置(当然,它们不使用异常)。

有没有理由保留这些?我能想象他们提供的唯一功能是防止执行逻辑超出了一个不应该执行的函数的重定向,但它看起来像是不好的不必要的编码给我。

4 个答案:

答案 0 :(得分:3)

他们很有帮助。如果没有die(),脚本将执行到最后,然后重定向。

想象一下有20个数据库查询的脚本。在第一次查询之前,您有例如

if ($_GET['redirNow']){
   $this->redirect($url);
   die();
}

它不会做任何疑问。如果没有die(),它将执行所有20个查询。

答案 1 :(得分:3)

您可以阅读来源。 function redirect($url, $status = null, $exit = true) $exit默认为true,@param boolean $exit If true, exit() will be called after the redirect

答案 2 :(得分:0)

如果使用header()完成重定向,那么使用die()是一个很好的理由。由于某些编程错误,如果在重定向之前将某些数据发送到浏览器,则重定向将失败。最好在那个阶段退出,而不是执行不打算执行的脚本的其余部分。

答案 3 :(得分:-1)

你是对的。最好使用错误处理程序和日志记录机制。看看这篇文章:

http://www.phpfreaks.com/blog/or-die-must-die