PHP:异常与自定义错误

PHP:异常与自定义错误,php,exception,exception-handling,Php,Exception,Exception Handling,今天我和我的一个朋友聊得很开心。我们讨论了web开发的几个方面 他批评了我的应用程序错误处理方法,基本上,如果我需要检查用户权限以执行操作,我会执行以下操作: // My little function function check_user_perms($user) { // @returns boolean // checking is user is permitted to perform an action return ($something > 1)

今天我和我的一个朋友聊得很开心。我们讨论了web开发的几个方面

他批评了我的应用程序错误处理方法,基本上,如果我需要检查用户权限以执行操作,我会执行以下操作:

// My little function
function check_user_perms($user)
{
    // @returns boolean
    // checking is user is permitted to perform an action
    return ($something > 1) ? TRUE : FALSE; // of course it returns true/false, not null
}

// place where I need to check user permission
// please note that following lame snippets are meant to show you my approach
if( check_user_perms($user_id) )
{
    // perform the action
}
else
{
    echo 'You have no permission to perform this action.';
}
他说,我应该使用例外。所以我开始阅读,并认为我学到了良好的实践

需要澄清的事情很少:
1.我应该为web应用程序中的所有内容使用异常吗?
2.如果是,如何在生产时向用户显示消息?

3.你有什么建议

check\u user\u perms
应绝对返回
TRUE
FALSE
(而不是
NULL
!)

例外情况适用于例外情况,而不是一般的程序流控制

例如:

  • 如果用户有执行此操作的权限,则返回
    TRUE
  • 如果用户没有执行此操作的权限,则返回
    FALSE
  • 如果用户不存在,则抛出异常(因为如果首先调用此函数,我们希望用户存在)

例外情况应用于“例外情况”。检查用户是否具有适当的权限不是“例外情况”。这是一种非常常见的检查,不应使用异常。在这里返回
true/false
就可以了

另一方面,如果在检查用户是否具有访问权限时发生“异常”错误,例如由于身份验证服务器关闭而无法检查身份验证服务器,则抛出异常是合适的

以下是更多要查看的资源:


对于异常情况,即意外或异常情况,应使用异常。根据检查的上下文,缺少权限可能是异常的,也可能不是。例如,如果您的代码只是为授权用户做一件事,为未经授权的用户做另一件事,或者更常见的情况是只允许对授权用户进行额外访问(例如,为管理员显示管理菜单),那么您不应该为此使用异常。另一方面,如果未经授权的用户试图访问需要授权的web操作,或者非管理员试图访问仅限管理员的操作,则异常很可能是适当的响应。在这种情况下,您应该捕获异常并执行适当的操作,比如重定向到登录或错误操作

作为一种推广,我认为确定用户是否具有特定权限的代码不应该抛出异常,而应该返回true或false。根据上下文的不同,调用该调用的代码可能会选择在需要和期望权限的情况下引发异常。

此代码(特别是echo)是否驻留在输出模板中?--例外情况当然不适用于“一切”。将它们用于最终用户消息信令几乎是可行的(特殊异常类),但理想情况下,用户通知应该使用由应用程序而不是运行时处理的单独系统。