Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 何时使用Try-Catch块_Php_Try Catch - Fatal编程技术网

Php 何时使用Try-Catch块

Php 何时使用Try-Catch块,php,try-catch,Php,Try Catch,好的,这可能是一个很难回答的问题,但我发现关于这个问题的PHP文档和一些互联网搜索并没有给我任何想法 什么时候应该使用try-catch块来改进我的应用程序 我读到有人说我们应该使用try-catch块来防止致命错误。 我读到其他人说我们应该只在意外错误上使用它(等等什么?意外?如果它们是意外错误,我如何用try-catch阻止它们?我应该将所有应用程序代码放在try块中吗?)。 其他人只是说try-catch块应该到处使用,因为它们也可以扩展(扩展异常类)。 最后有人说PHP try-catc

好的,这可能是一个很难回答的问题,但我发现关于这个问题的PHP文档和一些互联网搜索并没有给我任何想法

什么时候应该使用try-catch块来改进我的应用程序

我读到有人说我们应该使用try-catch块来防止致命错误。 我读到其他人说我们应该只在意外错误上使用它(等等什么?意外?如果它们是意外错误,我如何用try-catch阻止它们?我应该将所有应用程序代码放在try块中吗?)。 其他人只是说try-catch块应该到处使用,因为它们也可以扩展(扩展异常类)。 最后有人说PHP try-catch块完全没有用,因为它们的实现非常糟糕。(关于这一点,我发现了一个关于性能的非常好的问题)


在我看来,这个话题非常奇怪和混乱。有人能给我点灯吗?

你不能到处都放试抓块

然而,在应用程序测试期间,生成的异常应该提醒您需要尝试捕获的地方。这就是您应该对应用程序/代码进行彻底测试的原因之一

如果你看到一个你认为需要它的地方,我会放一个进去


编辑:好的,你可以把它们放在任何地方,但是你需要知道如何把它们放在你的代码中。

不同的人会告诉你不同的事情。但这就是我的想法,特别是在web应用程序的情况下

您的整个页面应该位于一个try/catch中,向用户显示一条错误消息。错误消息不应该详细告诉用户发生了什么,因为这是一个安全问题。它应该将有关错误的信息记录到日志文件中

另一种情况是,在正常的事务运作中可能会出现问题。PHP不是很高兴,所以这种情况可能不会经常发生。基本上,如果您遇到一个函数,当它失败时抛出一个异常,您可以捕获该异常并在这种情况下执行其他操作

一般来说,你的问题就像问你如何使用锤子来提高房子的质量。使用异常帮助您实现特定行为。不要寻找使用异常的位置

在我看来,这个话题非常奇怪和混乱。有人能给我点灯吗

当然。我不是PHP用户,但在使用过ActionScript、Java和JavaScript中的try/catch之后,我可能会有一些见解。但是请记住,不同的语言和平台鼓励对try/catch进行不同的使用。也就是说

我唯一建议使用try/catch的时候是,如果您使用的是本机语言函数

  • 可以引发错误/异常
  • 不提供任何工具来检测您是否将要执行会导致错误/异常的愚蠢操作。例如:在ActionScript中,关闭未打开的加载程序将导致错误,但加载程序没有要检查的isOpen属性,因此您必须将其包装在try/catch中,以消除一个完全没有意义的错误
  • 错误/异常实际上是毫无意义的
  • 让我们以您列出的示例为例,看看它们如何与该列表相符

    我读到有人说我们应该使用try-catch块来防止致命错误

    对于AS的loader.close()函数,这是一个很好的建议。这是一个致命的错误,所有这些都来自于一个微不足道的错误。另一方面,AS中几乎所有的错误都会导致应用程序停止。然后你能把它们全部包起来吗?绝对不是!“致命错误”之所以致命是有原因的。这意味着发生了严重错误,应用程序在潜在的“未定义”状态下继续运行是鲁莽的。最好知道发生了错误,然后修复它,而不是让它过去

    我读到其他人说,我们应该只在意外错误时使用它

    那更糟。这些都是你不想沉默的错误,因为沉默意味着你永远找不到它们。也许你没有吞下它们,但是。。。也许你正在记录它们。但是,为什么要尝试/catch/log/continue,就好像什么都没发生一样,让程序在潜在的危险和意外情况下运行呢?只要让错误踢你的牙齿,然后修复它。没有什么比调试别人编写的程序中的错误更令人沮丧的了,因为他们将所有内容都打包在try/catch块中,然后忽略了日志记录

    其他人只是说try-catch块应该到处使用,因为它们也可以扩展(扩展异常类)

    如果你是做投掷的人,并且你试图提醒自己在你的程序中有一个异常情况,那么这有潜在的好处。。。但是为什么要尝试/捕捉自己抛出的错误呢?让它踢你的牙,然后修复它,这样你就不需要再抛出错误了

    最后有人说PHP try-catch块完全没有用,因为它们的实现非常糟糕。(关于这一点,我发现了一个关于性能的非常好的问题)

    也许是这样。但是我不能回答这个问题


    所以。。。这可能是一个有点宗教色彩的问题,我相信人们会不同意我的观点,但从我的角度来看,这些是我多年来在尝试/捕获方面学到的经验。

    我认为这只是偏好的问题,但从我的经验来看,我鼓励你尽可能多地使用它们

    在我们目前正在开发的应用程序中(如果有必要的话,使用Zend Framework),我们使用一个try..catch块来捕获整个应用程序中显示给用户的所有异常,例如,错误500s和异常记录,并将更多信息记录到数据库中。一、 就个人而言,在PHP应用程序中喜欢这种方法,因为例外情况是扩展的