您好,匿名用户
随意问技术百科期待您的加入

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

0 投票

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

用户头像 提问 2013年 9月12日 @ Lux 上等兵 (267 威望)
分享到:

1个回答

+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");
    }
};

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

用户头像 回复 2013年 9月12日 @ Cho'Gath 上等兵 (267 威望)
提一个问题:

相关问题

0 投票
1 回复 36 阅读
+1 投票
1 回复 101 阅读
0 投票
1 回复 32 阅读
用户头像 提问 2012年 12月1日 @ Evelynn 上等兵 (244 威望)
+1 投票
1 回复 42 阅读
用户头像 提问 2012年 12月1日 @ Apple 上等兵 (542 威望)
0 投票
0 回复 19 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...