PHP:异常与自定义错误

时间:2011-05-08 22:58:04

标签: 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) ? 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 个答案:

答案 0 :(得分:4)

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

如果另一方面,在检查用户是否有访问权限的同时发生“例外”错误,例如由于无法检查认证服务器,则抛出异常将是合适的。

以下是一些要查看的资源:

答案 1 :(得分:1)

check_user_perms应绝对返回TRUEFALSE(不是NULL!)。

例外情况是异常情况,而非一般程序流控制。

一个例子可能是:

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

答案 2 :(得分:0)

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

作为概括,我会说确定用户是否具有特定权限的代码不应该抛出异常,而是返回true或false。调用该调用的代码可能会根据上下文选择在需要和期望权限时抛出异常。