V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
johnsneakers
V2EX  ›  PHP

类方法里面,三种情况的返回值,怎么设计比较合理和优雅

  •  
  •   johnsneakers · 2014-12-02 16:27:24 +08:00 · 2552 次点击
    这是一个创建于 3643 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在重构别人的代码,以前的代码类方法里面都这种:
    public function method() {
    if(查询出错)
    return -100;


    else if(查询结果为空)
    return 0;

    else
    return 1;

    }

    //调用的时候判断数字。。。


    我想得是,查询出错直接throw exception , 为空就是返回false, 有值就返回true.
    不知道这样合理不,或者说还有更优雅的实现?
    10 条回复    2014-12-03 10:24:44 +08:00
    xudshen
        1
    xudshen  
       2014-12-02 16:42:59 +08:00   ❤️ 1
    java的话我倾向于这样,因为还是会有些时候用到查询的返回数据的
    ```
    public Object query() throws Exception{
    if(查询出错){
    throw new Exception();
    }
    if(查询结果为空){
    return null;
    }
    else{
    return 查询到的数据;
    }
    }

    ```
    返回true,false一般用来check是否存在查询数据的,会再wrap一个函数
    ```
    public Boolean check() throws Exception{
    return query() != null;
    }
    ```
    hcymk2
        2
    hcymk2  
       2014-12-02 17:04:09 +08:00   ❤️ 1
    我觉得得看你的方法名字。
    yunshansimon
        3
    yunshansimon  
       2014-12-02 17:06:53 +08:00   ❤️ 1
    要判断,这个错误是否会影响整体运行的结果,如果不影响,就包装一下好了,只有在可控范围内无法处理,而且严重影响其他代码运行的错误才需要throws exception。经常会有错误发生的话,C类的可以传递一个error对象进去当作输出参数,**error,调用返回后检查error是不是null。java的话就不行了,你能处理的,就尽量在函数中处理吧,要throws exception,就必须用try的方式调用,很麻烦,否则编译器报错。
    mcfog
        4
    mcfog  
       2014-12-02 17:12:58 +08:00   ❤️ 1
    有值返回true的话值放在哪里……

    一般而言我会用exception/array 这样,无论是否有结果都返回array,外面关心空结果的话用empty判断就好

    如果是只查一条记录的,看这条记录是否“应该存在”,如果“应该存在”,那么出错和空抛不同exception,如果“不存在正常”的话,用exception/null/$data 这样

    数据库倒了这么重要的事情当然要抛exception让外面处理

    一般而言,除非方法本身就是判断句isXXX hasXXX,我会尽量不返回true/false

    优雅不敢谈,但求不坑
    Sunyanzi
        5
    Sunyanzi  
       2014-12-02 18:04:55 +08:00
    返回三种值的情况难道不该用三元吗 ...
    mkeith
        6
    mkeith  
       2014-12-02 22:49:19 +08:00
    @Sunyanzi 又来三元运算了撒:)
    ihgoo
        7
    ihgoo  
       2014-12-02 22:56:16 +08:00
    return result == null ? 0 : result;
    kmvan
        8
    kmvan  
       2014-12-02 23:09:38 +08:00
    可以参考wp的错误信息返回设计。返回一个对象,用类似 is_error($obj) 来判断是否错误。
    Sunyanzi
        9
    Sunyanzi  
       2014-12-03 00:40:09 +08:00
    @mkeith 你看你看这种情况不就是为我这种三元狂魔量身定做的吗!
    sarices
        10
    sarices  
       2014-12-03 10:24:44 +08:00
    查询出错应该抛出异常,没数据直接返回空数组,有数据就返回数据的数组
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3661 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:17 · PVG 18:17 · LAX 02:17 · JFK 05:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.