异常和错误之间的区别?

Mik*_*ore 4 php error-handling exception-handling

错误和异常有什么区别?

我已经在网上和几本书中阅读了大量资源,但所提供的解释并不十分彻底.因此,我仍然感到困惑.

谢谢!

编辑: 看起来我问了两个可能令人困惑的问题.我想要回答的主要问题是错误和异常之间区别.所以,我已经编辑了上面更具体的内容.谢谢大家的回答.

mpe*_*pen 6

都不是.异常和错误是代码执行错误的时候.用户或多或少地期望输入不正确的登录信息.检查用户名/密码是否正确,如果没有,将用户重定向回登录页面(header('location:login.php?failed=1');)然后如果$_GET['failed']设置,则显示消息.这是最简单的方法.

关于例外/错误......你通常应该坚持例外.你抛出一个异常,然后你抓住它并处理它.我认为trigger_error当你不知道如何处理catch块中的错误时,更多的是将错误传播回客户端.


Pet*_*ley 5

没有"应该"或"最好"的方法来进行错误处理.

一般来说,有两种类型的错误

  1. 那些由程序的其他部分处理的.用户永远不会看到或知道这些错误,至少不是直接的.
  2. 导致用户需要被告知的足够失败的那些.

请注意,这些都与您用于处理错误的特定PHP机制无关.

如果您使用例外... 那么我建议全面使用例外. 注册一个异常处理程序并让它完成大部分工作 - 包括其他PHP错误.登录详细信息无效?

class InvalidLoginException extends Exception
{
  protected $message = 'Login information is incorrect. Please try again.';
}
Run Code Online (Sandbox Code Playgroud)

然后你有很多选择来实现.

try {
  $user->login(); // will throw and InvalidLoginException if invalid
}
catch ( InvalidLoginException $e )
{
  // display an error message
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您这样选择,请让异常处理程序执行此操作.也许甚至以更灵活的方式

class ApplicationErrorException extends Exception{}
class InvalidLoginException extends ApplicationErrorException 
{
  protected $message = 'Login information is incorrect. Please try again.';
}
Run Code Online (Sandbox Code Playgroud)

然后,在异常处理程序中

if ( $exception instanceof ApplicationErrorException )
{
  // dislpay error message
}
Run Code Online (Sandbox Code Playgroud)

但例外不是唯一的方式,有些人甚至不认为是好方法.

  • 您应该将帖子的最后一行放在顶部并加粗.对于初学者来说,了解他们为什么以及何时应该使用某些东西而不仅仅是被告知如何去做更为重要. (3认同)