Mik*_*ore 4 php error-handling exception-handling
错误和异常有什么区别?
我已经在网上和几本书中阅读了大量资源,但所提供的解释并不十分彻底.因此,我仍然感到困惑.
谢谢!
编辑: 看起来我问了两个可能令人困惑的问题.我想要回答的主要问题是错误和异常之间的区别.所以,我已经编辑了上面更具体的内容.谢谢大家的回答.
都不是.异常和错误是代码执行错误的时候.用户或多或少地期望输入不正确的登录信息.检查用户名/密码是否正确,如果没有,将用户重定向回登录页面(header('location:login.php?failed=1');)然后如果$_GET['failed']设置,则显示消息.这是最简单的方法.
关于例外/错误......你通常应该坚持例外.你抛出一个异常,然后你抓住它并处理它.我认为trigger_error当你不知道如何处理catch块中的错误时,更多的是将错误传播回客户端.
没有"应该"或"最好"的方法来进行错误处理.
一般来说,有两种类型的错误
请注意,这些都与您用于处理错误的特定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)
但例外不是唯一的方式,有些人甚至不认为是好方法.