【问题标题】:PHP: error-handling - best way to structure code for number of true/false statements?PHP:错误处理 - 为真/假语句数量构建代码的最佳方法?
【发布时间】:2012-06-07 21:39:47
【问题描述】:

在文件顶部我要检查用户权限,例如如果已登录,用户是否有权访问页面,他们可以看到哪些内容,内容是否由用户自己发布,是否已传递所有必要的参数(例如POST-vars)等。

所以,问题是,您认为最好的方法是什么(代码保持可读性和可理解性,对于特殊页面来说不是太具体,以便可以在每个页面上实现它,因为许多检查需要数据库查询等)

我问的原因是,因为我现在正在做这样的事情:

if($logged_in!=1) {$error="err1";}

else {
    if(...) {...}
    else {...}
}

所以,基本上,如果一个检查返回访问被拒绝,代码将不会通过所有其他ifs,而是立即中断。我不使用exitdie,因为我确实想显示页面(没有内容但有一个错误框),所以如果我使用exitdie 它不会在下面显示任何其他代码.. .

你会建议做什么?

非常感谢您的帮助。

【问题讨论】:

    标签: php if-statement error-handling structure


    【解决方案1】:

    嗯,if/else 结构往往很大而且不可读。您可以考虑使用Exceptions 处理失败情况,基本上:

    <?php
    try {
    
       if($logged_in!=1) {
          throw new Exception("You must be logged in");
       }
    
       if(!another_condition()) {
          throw new Exception("Another condition failed");
       }
    
       do_something();
    }
    catch (Exception $error) {
       display_error_page($error->getMessage());
    }
    

    一般来说,即使这样也不是最漂亮的方式:这些情况本身就是需要面向对象的完美示例..

    另见:

    http://php.net/manual/en/language.oop5.php

    http://php.net/manual/en/language.exceptions.php

    【讨论】:

    • 我个人尽量避免使用异常来检查用户操作可能发生的条件,因为这些不是“异常”。例如,我会使用 try/catch 来确保我已连接到数据库,或者如果远程 Web 服务返回意外错误。
    • 公平点。但是这样你就有了一个通用的机制来处理任何错误情况,不管它是否是由处理逻辑中的用户引起的……为什么不使用某种特殊的UserInteractionException?也可以称之为UserErrorOSILayer8Fatal...
    • 感谢 mjhennig 的回答和链接,并引导我朝着正确的方向前进!因为我只是通过这样做来学习,所以最终是理解 oop 的一个合乎逻辑的例子!谢谢你!
    • 首先,性能:stackoverflow.com/questions/104329/… 检查异常是一回事,但抛出异常会增加昂贵的处理层。然后,您必须区分“计划中的”错误,例如用户试图访问被禁止的资源,以及恢复涉及完全中断工作流的那些例外情况。试想一下,如果 preg_match 函数在没有找到匹配项并且您忘记捕获此异常时抛出异常?
    • @SirDarius:好的,那你有什么建议呢?还用 ifs 吗?
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2016-08-21
    • 2017-09-13
    相关资源
    最近更新 更多