Elegant的函数参数检查
来源:互联网 发布:数据库别名有什么作用 编辑:程序博客网 时间:2024/04/29 21:12
原文URL:http://blog.csdn.net/u012859646/article/details/16840299 [2012.3]
刚好有一个小功能要实现,可能是有段时间没写码的缘故,有点患洁癖,想把代码尽量写得干净点,下面是一个需要优化的case (刚好用php, 就以php来说明)。
如有一个函数: function foo($uid, $phone, $email, $sex, $age),为了数据的合法性,我们第一步要做参数验证,这个非常重要,在高质量的编程习惯里相信都会有一条“永远不要信任外部数据”。那么,一般怎么写,考虑以下两种可能的方案:
如有一个函数: function foo($uid, $phone, $email, $sex, $age),为了数据的合法性,我们第一步要做参数验证,这个非常重要,在高质量的编程习惯里相信都会有一条“永远不要信任外部数据”。那么,一般怎么写,考虑以下两种可能的方案:
方案一
方案二
希望实现这样一种检查方式,首先能保持尽量少的代码量,还能准确找出有问题的参数。受到级联调用的启发,可以用如下方案三,实现一个通用的检查类 validator。
方案三
2012.3
--EnD--
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--
- Elegant的函数参数检查
- C语言函数的参数检查
- 如何让GCC检查类printf函数的参数
- 函数梯度的检查
- Java函数中的参数有效性检查
- 统一管理应用程序的参数检查
- 参数检查类的使用
- python 的 参数 静态检查
- 程序中参数的检查
- 安全函数(后缀为_s)的参数检查和…
- Python 进阶 —— 使用修饰器执行函数的参数检查
- 参数检查
- 参数检查
- 检查控件有效性的函数
- 通用的表单检查函数
- VC6的栈检查函数
- php 检查电子邮件的函数
- [收藏]C++ Tips(4)--参数的检查
- 千里之行,第一步该怎样走?
- Python 学习入门(10)—— 时间
- 和黑帽SEO说byebye!用真实白帽SEO,论坛互踩,互相加人气,互踩论坛—【论坛站长的福音】
- 苹果php推送
- 短URL跳转攻击
- Elegant的函数参数检查
- 提高WEB服务响应时间by优化日志打印
- webDetailView
- log4j日志配置
- ubuntu下用virtualbox运行百度hi
- java学习日志2
- GUI显示系统之SurfaceFlinger--- Gralloc与Framebuffer
- JSON
- Android WebView缓存策略详解