Php 投掷是如何工作的?

Php 投掷是如何工作的?,php,exception,throw,Php,Exception,Throw,我想知道throw在PHP中是如何工作的 例如,它的行为是否像一个die()或exit()?我如何知道内部做了什么 我问这个问题是因为我看到Kohana使用带有抛出的$this->redirect()方法来终止脚本执行,而不是传统的退出。throw与exit或die完全不同。引发异常不会自动终止应用程序,引发的异常可能会被应用程序捕获。只有在未捕获异常时,应用程序才会终止 try { throw new Exception; } catch (Exception $e) { ec

我想知道
throw
在PHP中是如何工作的

例如,它的行为是否像一个
die()
exit()
?我如何知道内部做了什么


我问这个问题是因为我看到Kohana使用带有抛出的
$this->redirect()
方法来终止脚本执行,而不是传统的退出。

throw
exit
die
完全不同。引发异常不会自动终止应用程序,引发的异常可能会被应用程序捕获。只有在未捕获异常时,应用程序才会终止

try {
    throw new Exception;
} catch (Exception $e) {
    echo 'caught it';
}

echo 'not dead yet';
异常是一种以比简单的
return false
语句更灵活、更严格的方式向上级调用方发出错误信号的机制。它们不能与简单的
退出
模具
相比

我不知道Kohana到底做了什么,但抛出异常而不是使用简单的
退出
死亡
是对异常的滥用。只有在异常错误情况下才应抛出异常。

在不使用try/catch的情况下使用“throw”将以“可捕获的致命错误”终止脚本。据我所知,这样使用“扔”是没有好处的。如果要终止脚本,则应使用exit(),这样就不需要抑制错误消息。

As,您可以使用
throw
抛出可以在应用程序中“进一步”捕获的异常

当您使用对象和面向对象编程时,您开始将您创建的每个对象作为独立对象进行编码,您可以将其提供给其他人。这些方法的公共方法是一个API,每个公共方法上方的phpdoc详细说明了类在某些情况下可能抛出的异常

因此,有人创建了一个独立的对象,它可以为您做一些事情,比如写入磁盘。您希望使用此对象,因此查看文档,当对象由于权限问题而无法写入磁盘时,它会抛出
PermissionsException

在使用此人对象的代码中,您现在知道,您应该捕获该异常,记录它,并在这种情况下继续运行您希望的应用程序(例如,如果是通过AJAX调用,则向用户显示一个不错的错误)

因此,知道了这一点,当您编写自己的对象时,针对不同的情况做出描述性的例外,您将对象提供给他们的人可以在他们自己的应用程序中使用和响应

die
exit
都是您不想在生产应用程序中使用的。当您执行
var\u dump()
然后想要立即停止应用程序执行,或者出于某种原因想要完全停止脚本运行时,它们对于调试非常有用


至于您找到的特定代码段为什么会这样做,您应该询问开发人员是否有充分的理由证明它。

从这里开始:@Closevoter(s)这与超级用户无关!你想从这里得到什么“内部”信息?@deceze显然他不是指它是如何用C写的。谢谢你的解释!我将尝试挖掘更多关于Kohana重定向的信息()当选择的答案以“如前所述”开头时,我不喜欢它。不幸的是,对我来说,它没有。你是我第一次接触到这个答案。@Hoytman有一个问题,这就是所引用的解释。你花了多少时间来解释你如何不喜欢“正如已经解释过的”是一种浪费;最好把注意力集中在对自己和他人更有利的事情上。另外,如果你有足够的权限,你可以编辑,我可以接受,以备将来参考。我对这些消息感到困惑(这些消息出现在论坛上)。作为讨论的新访问者,它读起来是对OP的谴责。也许如果它是一个链接……我的建议是在回复评论时检查你的态度——说你立即不喜欢某样东西,因为新手不会让你有任何收获。带着尊重的态度提问会让你很高兴。你会走得更远。我也更新了你的建议,谢谢:)