开发者社区> 问答> 正文

php中如何解决函数参数列表过长问题?

想写个灵活拼接sql语句的函数,把selectfromwheregroup byorder by,limit这些都作为参数传递。但是如果每一个都作为独立的参数传递,调用函数的时候,就会受到参数顺序的限制,简单的sql也可能写好几个无用空参数。
如果要是通过构造一个对象来传递所有参数,参数列表短了,也不受顺序限制了,但是每次调用函数前又都要构造对象,也挺麻烦,感觉用起来不自然。有什么好的方法解决吗?

展开
收起
落地花开啦 2016-06-13 10:23:56 2318 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    过长的函数拼接可读性差,也就是说,代码没有表达性。
    给一个DSL的传送门,很可以没有对应中文版 http://en.wikipedia.org/wiki/Domain-s...
    如果你不喜欢面对对象的语法:

    query().from("user")
        .where(
          (user.firstName.like("Bob")).or(user.firstName.like("Ann")))
        .orderBy(user.firstName.asc())
        .list(user);

    面向对象语法:

    InsertSQL sql = new InsertSQL();
    sql.insertInto("students")
       .value("id", new Integer(id))
       .value("name", name)
       .value("gender", gender);
    

    最后赠送你一个我以前用过的DSL

    /**
     * 配置路由规则
     */
    RouteBuilder builder = new RouteBuilder() {
        public void configure() {
            from("/user").filter(header("language").isEqualTo("zh")).to("/zh/user");
            from("/user/edit/3").choice()
                .when(header("foo").isEqualTo("bar")).to("queue:d")
                .when(header("foo").isEqualTo("cheese")).to("queue:e")
                .otherwise().to("queue:f");
        }
    };

    具有表达性的代码是:做什么,而不是怎么做。

    2019-07-17 19:35:12
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-直面PHP微服务架构挑战-高驰涛 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载