Elegant的函数参数检查

       刚好有一个小功能要实现,可能是有段时间没写码的缘故,有点患洁癖,想把代码尽量写得干净点,下面是一个需要优化的case (刚好用php, 就以php来说明)。
      如有一个函数: function foo($uid, $phone, $email, $sex, $age),为了数据的合法性,我们第一步要做参数验证,这个非常重要,在高质量的编程习惯里相信都会有一条“永远不要信任外部数据”。那么,一般怎么写,考虑以下两种可能的方案: 

方案一     
if ( !(valid_uid($uid) && valid_phone($phone) && valid_email($email) && valid_sex($sex) && valid_age($age) )  ) {
    LOG(“invalid arg!”);     
}
      这个方案的好处是写起来只有一行,代码量是省的。可是,不能精确地把错误参数打印出来。你也许可以把所有参数全部输出到日志,可这样的日志要看清楚问题想必也要耗费不少精力。

方案二  
if (!valid_uid($uid)) {
    LOG(“invalid uid”);
}
if (!valid_phone($phone)) {
    LOG(“invalid phone”);
}
if (!valid_email($email)) {
    LOG(“invalid email”)
}
       这个方案看日志就清爽了,你可以定位哪个参数为非法。 问题也很明显,这5个参数就得赔上N行的代码。 除了增加代码量,这种方案实在不是一种优雅的方案。
       希望实现这样一种检查方式,首先能保持尽量少的代码量,还能准确找出有问题的参数。受到级联调用的启发,可以用如下方案三,实现一个通用的检查类 validator。
       
方案三
$vd = new validator();
$vd->uid($uid)->phone($phone)->email($email)->sex($sex)->age($age);
if ($vd->fail()) {
    LOG($vd->err_msg());
}
       思路有了,实现上其实很简单,这里就不贴代码了。这个方案不是特定于php语言特性,很容易移植到其它语言。

  2012.3
--EnD--   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值